segfaultを修正した

このコミットが含まれているのは:
守矢諏訪子 2023-11-29 21:58:30 +09:00
コミット 380cb73242
2個のファイルの変更11行の追加12行の削除

ファイルの表示

@ -78,7 +78,7 @@ void addpass(char* file) {
// パスワードを保存する // パスワードを保存する
gpgme_ctx_t ctx; gpgme_ctx_t ctx;
gpgme_error_t err; gpgme_error_t err;
gpgme_key_t key; gpgme_key_t key[2] = {NULL, NULL};
gpgme_data_t in, out; gpgme_data_t in, out;
FILE *gpgfile; FILE *gpgfile;
@ -144,14 +144,14 @@ void addpass(char* file) {
keyid[strcspn(keyid, "\n")] = 0; keyid[strcspn(keyid, "\n")] = 0;
fclose(keyfile); fclose(keyfile);
err = gpgme_get_key(ctx, keyid, &key, 0); err = gpgme_get_key(ctx, keyid, &key[0], 0);
if (err) { if (err) {
fprintf(stderr, "鍵を受取に失敗: %s\n", gpgme_strerror(err)); fprintf(stderr, "鍵を受取に失敗: %s\n", gpgme_strerror(err));
free(keyid); free(keyid);
return; return;
} }
if (key == NULL) { if (key[0] == NULL) {
fprintf(stderr, "エラー鍵はNULLです。\n"); fprintf(stderr, "エラー鍵はNULLです。\n");
free(keyid); free(keyid);
return; return;
@ -160,14 +160,13 @@ void addpass(char* file) {
free(keyid); free(keyid);
// 暗号化 // 暗号化
gpgme_key_t recp[1] = {key}; err = gpgme_op_encrypt(ctx, &key[0], GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
err = gpgme_op_encrypt(ctx, recp, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
if (err) { if (err) {
fprintf(stderr, "暗号化に失敗: %s\n", gpgme_strerror(err)); fprintf(stderr, "暗号化に失敗: %s\n", gpgme_strerror(err));
gpgme_data_release(in); gpgme_data_release(in);
gpgme_data_release(out); gpgme_data_release(out);
gpgme_release(ctx); gpgme_release(ctx);
gpgme_key_release(key); gpgme_key_release(key[0]);
return; return;
} }
@ -179,7 +178,7 @@ void addpass(char* file) {
gpgme_data_release(in); gpgme_data_release(in);
gpgme_data_release(out); gpgme_data_release(out);
gpgme_release(ctx); gpgme_release(ctx);
gpgme_key_release(key); gpgme_key_release(key[0]);
perror("メモリを割当に失敗。"); perror("メモリを割当に失敗。");
return; return;
} }
@ -197,7 +196,7 @@ void addpass(char* file) {
gpgme_data_release(in); gpgme_data_release(in);
gpgme_data_release(out); gpgme_data_release(out);
gpgme_release(ctx); gpgme_release(ctx);
gpgme_key_release(key); gpgme_key_release(key[0]);
perror("ディレクトリを創作に失敗。"); perror("ディレクトリを創作に失敗。");
return; return;
} }
@ -212,7 +211,7 @@ void addpass(char* file) {
gpgme_data_release(in); gpgme_data_release(in);
gpgme_data_release(out); gpgme_data_release(out);
gpgme_release(ctx); gpgme_release(ctx);
gpgme_key_release(key); gpgme_key_release(key[0]);
return; return;
} }
@ -225,7 +224,7 @@ void addpass(char* file) {
gpgme_data_release(in); gpgme_data_release(in);
gpgme_data_release(out); gpgme_data_release(out);
gpgme_release(ctx); gpgme_release(ctx);
gpgme_key_release(key); gpgme_key_release(key[0]);
return; return;
} }
@ -244,7 +243,7 @@ void addpass(char* file) {
gpgme_data_release(in); gpgme_data_release(in);
gpgme_data_release(out); gpgme_data_release(out);
gpgme_release(ctx); gpgme_release(ctx);
gpgme_key_release(key); gpgme_key_release(key[0]);
printf("パスワードを保存出来ました。\n"); printf("パスワードを保存出来ました。\n");
} }

2
main.c
ファイルの表示

@ -25,7 +25,7 @@ void helpme() {
//printf("%s -l :パスワード一覧を表示\n", sofname); //printf("%s -l :パスワード一覧を表示\n", sofname);
printf("%s -a <パスワード名> :パスワードを追加\n", sofname); printf("%s -a <パスワード名> :パスワードを追加\n", sofname);
//printf("%s -d <パスワード名> :パスワードを削除\n", sofname); //printf("%s -d <パスワード名> :パスワードを削除\n", sofname);
//printf("%s -g <文字数> [risk|secure] <パスワード名> :希望文字数でパスワードをランダムに作成して、追加する。risk英数字のみ(不安)、secure英数字特別文字(デフォルト)を使用\n", sofname); //printf("%s -g <文字数> [risk|secure] <パスワード名> :希望文字数でパスワードをランダムに作成する。risk英数字のみ(不安)、secure英数字特別文字(デフォルト)を使用\n", sofname);
//printf("%s -o <パスワード名>\n ワンタイムパスワード(TOTP)を表示。存在しなければ、創作する", sofname); //printf("%s -o <パスワード名>\n ワンタイムパスワード(TOTP)を表示。存在しなければ、創作する", sofname);
printf("%s -h :ヘルプを表示\n", sofname); printf("%s -h :ヘルプを表示\n", sofname);
printf("%s -v :バージョンを表示\n", sofname); printf("%s -v :バージョンを表示\n", sofname);