From 380cb7324282603f945b41bde92f3e04c368a373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Wed, 29 Nov 2023 21:58:30 +0900 Subject: [PATCH] =?UTF-8?q?segfault=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addpass.c | 21 ++++++++++----------- main.c | 2 +- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/addpass.c b/addpass.c index d4ac8f9..8a207af 100644 --- a/addpass.c +++ b/addpass.c @@ -78,7 +78,7 @@ void addpass(char* file) { // パスワードを保存する gpgme_ctx_t ctx; gpgme_error_t err; - gpgme_key_t key; + gpgme_key_t key[2] = {NULL, NULL}; gpgme_data_t in, out; FILE *gpgfile; @@ -144,14 +144,14 @@ void addpass(char* file) { keyid[strcspn(keyid, "\n")] = 0; fclose(keyfile); - err = gpgme_get_key(ctx, keyid, &key, 0); + err = gpgme_get_key(ctx, keyid, &key[0], 0); if (err) { fprintf(stderr, "鍵を受取に失敗: %s\n", gpgme_strerror(err)); free(keyid); return; } - if (key == NULL) { + if (key[0] == NULL) { fprintf(stderr, "エラー:鍵はNULLです。\n"); free(keyid); return; @@ -160,14 +160,13 @@ void addpass(char* file) { free(keyid); // 暗号化 - gpgme_key_t recp[1] = {key}; - err = gpgme_op_encrypt(ctx, recp, GPGME_ENCRYPT_ALWAYS_TRUST, in, out); + err = gpgme_op_encrypt(ctx, &key[0], GPGME_ENCRYPT_ALWAYS_TRUST, in, out); if (err) { fprintf(stderr, "暗号化に失敗: %s\n", gpgme_strerror(err)); gpgme_data_release(in); gpgme_data_release(out); gpgme_release(ctx); - gpgme_key_release(key); + gpgme_key_release(key[0]); return; } @@ -179,7 +178,7 @@ void addpass(char* file) { gpgme_data_release(in); gpgme_data_release(out); gpgme_release(ctx); - gpgme_key_release(key); + gpgme_key_release(key[0]); perror("メモリを割当に失敗。"); return; } @@ -197,7 +196,7 @@ void addpass(char* file) { gpgme_data_release(in); gpgme_data_release(out); gpgme_release(ctx); - gpgme_key_release(key); + gpgme_key_release(key[0]); perror("ディレクトリを創作に失敗。"); return; } @@ -212,7 +211,7 @@ void addpass(char* file) { gpgme_data_release(in); gpgme_data_release(out); gpgme_release(ctx); - gpgme_key_release(key); + gpgme_key_release(key[0]); return; } @@ -225,7 +224,7 @@ void addpass(char* file) { gpgme_data_release(in); gpgme_data_release(out); gpgme_release(ctx); - gpgme_key_release(key); + gpgme_key_release(key[0]); return; } @@ -244,7 +243,7 @@ void addpass(char* file) { gpgme_data_release(in); gpgme_data_release(out); gpgme_release(ctx); - gpgme_key_release(key); + gpgme_key_release(key[0]); printf("パスワードを保存出来ました。\n"); } diff --git a/main.c b/main.c index 2ea0579..4c50fc3 100644 --- a/main.c +++ b/main.c @@ -25,7 +25,7 @@ void helpme() { //printf("%s -l :パスワード一覧を表示\n", sofname); printf("%s -a <パスワード名> :パスワードを追加\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 -h :ヘルプを表示\n", sofname); printf("%s -v :バージョンを表示\n", sofname);