diff options
author | Werner Koch <[email protected]> | 2015-03-15 13:01:36 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2015-03-15 13:01:36 +0000 |
commit | 1a9f13bc663daa75c5009f6a0bf7d7483f12cce0 (patch) | |
tree | 434b99a7d1c4e7ff57f4b3fb539e81824ca66798 | |
parent | g13: Fix pointer wrap check. (diff) | |
download | gnupg-1a9f13bc663daa75c5009f6a0bf7d7483f12cce0.tar.gz gnupg-1a9f13bc663daa75c5009f6a0bf7d7483f12cce0.zip |
gpg: Fix possible dead code elimination.
* g10/encrypt.c: Change condition for detecting a real file.
--
Detected by Stack 3.0:
bug: anti-dce
model: |
%tobool155 = icmp ne i32 %call154, 0, !dbg !1298
--> true
************************************************************
land.lhs.true156:
%96 = icmp eq i8* %filename, null
call void @opt.bugon(i1 %96), !dbg !1298, !bug !1250
%97 = load i8* %filename, align 1, !dbg !1298
%conv157 = sext i8 %97 to i32, !dbg !1298
%tobool158 = icmp ne i32 %conv157, 0, !dbg !1298
br i1 %tobool158, label %land.lhs.true159, label %if.else177,\
!dbg !1298
stack:
- /home/wk/s/gnupg/g10/encrypt.c:639:0
ncore: 1
core:
- /home/wk/s/gnupg/g10/encrypt.c:639:0
- null pointer dereference
-rw-r--r-- | g10/encrypt.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/g10/encrypt.c b/g10/encrypt.c index 8d2b325f9..7b5028d31 100644 --- a/g10/encrypt.c +++ b/g10/encrypt.c @@ -453,6 +453,9 @@ write_symkey_enc (STRING2KEY *symkey_s2k, DEK *symkey_dek, DEK *dek, * supplied). Either FILENAME or FILEFD must be given, but not both. * The caller may provide a checked list of public keys in * PROVIDED_PKS; if not the function builds a list of keys on its own. + * + * Note that FILEFD is currently only used by cmd_encrypt in the the + * not yet finished server.c. */ int encrypt_crypt (ctrl_t ctrl, int filefd, const char *filename, @@ -476,7 +479,7 @@ encrypt_crypt (ctrl_t ctrl, int filefd, const char *filename, int do_compress; if (filefd != -1 && filename) - return gpg_error (GPG_ERR_INV_ARG); + return gpg_error (GPG_ERR_INV_ARG); /* Both given. */ do_compress = !!opt.compress_algo; @@ -635,8 +638,9 @@ encrypt_crypt (ctrl_t ctrl, int filefd, const char *filename, if (!opt.no_literal) pt = setup_plaintext_name (filename, inp); - if (filefd != -1 - && !iobuf_is_pipe_filename (filename) && *filename && !opt.textmode ) + /* Get the size of the file if possible, i.e., if it is a real file. */ + if (filename && *filename + && !iobuf_is_pipe_filename (filename) && !opt.textmode ) { off_t tmpsize; int overflow; |