comparison mcabber/mcabber/pgp.c @ 2202:ff18feb75a6d

PGP: Add a trailing NULL after a message is PGP-encrypted This patch fixes another issue reported in #134.
author Mikael Berthe <mikael@lilotux.net>
date Mon, 12 Oct 2015 11:41:34 +0200
parents fec172dbacc7
children 7c843b29571b
comparison
equal deleted inserted replaced
2201:1c8ca1a8e5fe 2202:ff18feb75a6d
342 err = gpgme_data_new_from_mem(&in, gpg_data, strlen(gpg_data), 0); 342 err = gpgme_data_new_from_mem(&in, gpg_data, strlen(gpg_data), 0);
343 if (!err) { 343 if (!err) {
344 err = gpgme_data_new(&out); 344 err = gpgme_data_new(&out);
345 if (!err) { 345 if (!err) {
346 err = gpgme_op_sign(ctx, in, out, GPGME_SIG_MODE_DETACH); 346 err = gpgme_op_sign(ctx, in, out, GPGME_SIG_MODE_DETACH);
347 if (!err) { 347 if (err) {
348 gpgme_data_release(out);
349 } else {
348 signed_data = gpgme_data_release_and_get_mem(out, &nread); 350 signed_data = gpgme_data_release_and_get_mem(out, &nread);
349 if (signed_data) { 351 if (signed_data) {
350 // We need to add a trailing NULL 352 // We need to add a trailing NULL
351 char *dd = g_strndup(signed_data, nread); 353 char *dd = g_strndup(signed_data, nread);
352 free(signed_data); 354 free(signed_data);
353 signed_data = strip_header_footer(dd); 355 signed_data = strip_header_footer(dd);
354 g_free(dd); 356 g_free(dd);
355 } 357 }
356 } else {
357 gpgme_data_release(out);
358 } 358 }
359 } 359 }
360 gpgme_data_release(in); 360 gpgme_data_release(in);
361 } 361 }
362 if (err && err != GPG_ERR_CANCELED) 362 if (err && err != GPG_ERR_CANCELED)
408 err = gpgme_data_new_from_mem(&in, data, strlen(data), 0); 408 err = gpgme_data_new_from_mem(&in, data, strlen(data), 0);
409 if (!err) { 409 if (!err) {
410 err = gpgme_data_new(&out); 410 err = gpgme_data_new(&out);
411 if (!err) { 411 if (!err) {
412 err = gpgme_op_decrypt(ctx, in, out); 412 err = gpgme_op_decrypt(ctx, in, out);
413 if (!err) { 413 if (err) {
414 gpgme_data_release(out);
415 } else {
414 decrypted_data = gpgme_data_release_and_get_mem(out, &nread); 416 decrypted_data = gpgme_data_release_and_get_mem(out, &nread);
415 if (decrypted_data) { 417 if (decrypted_data) {
416 // We need to add a trailing NULL 418 // We need to add a trailing NULL
417 char *dd = g_strndup(decrypted_data, nread); 419 char *dd = g_strndup(decrypted_data, nread);
418 free(decrypted_data); 420 free(decrypted_data);
419 decrypted_data = dd; 421 decrypted_data = dd;
420 } 422 }
421 } else {
422 gpgme_data_release(out);
423 } 423 }
424 } 424 }
425 gpgme_data_release(in); 425 gpgme_data_release(in);
426 } 426 }
427 if (err && err != GPG_ERR_CANCELED) 427 if (err && err != GPG_ERR_CANCELED)
485 err = gpgme_data_new_from_mem(&in, gpg_data, strlen(gpg_data), 0); 485 err = gpgme_data_new_from_mem(&in, gpg_data, strlen(gpg_data), 0);
486 if (!err) { 486 if (!err) {
487 err = gpgme_data_new(&out); 487 err = gpgme_data_new(&out);
488 if (!err) { 488 if (!err) {
489 err = gpgme_op_encrypt(ctx, keys, GPGME_ENCRYPT_ALWAYS_TRUST, in, out); 489 err = gpgme_op_encrypt(ctx, keys, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
490 if (!err) 490 if (err) {
491 gpgme_data_release(out);
492 } else {
491 encrypted_data = gpgme_data_release_and_get_mem(out, &nread); 493 encrypted_data = gpgme_data_release_and_get_mem(out, &nread);
492 else 494 if (encrypted_data) {
493 gpgme_data_release(out); 495 // We need to add a trailing NULL
496 char *dd = g_strndup(encrypted_data, nread);
497 free(encrypted_data);
498 encrypted_data = dd;
499 }
500 }
494 } 501 }
495 gpgme_data_release(in); 502 gpgme_data_release(in);
496 } 503 }
497 504
498 if (err && err != GPG_ERR_CANCELED) { 505 if (err && err != GPG_ERR_CANCELED) {