diff options
author | Daniel Stenberg <daniel@haxx.se> | 2015-06-02 08:28:10 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2015-06-02 08:28:10 +0200 |
commit | 33ee4118483111876c00e68004bc50674992eda2 (patch) | |
tree | 66e7040773cd32fd87e4f696c73f49e737dc25eb | |
parent | 3bbcb4b03605bafa0d8e79f82240b1bc8de7a7e7 (diff) |
checksrc: detect fopen() for text without the FOPEN_* macros
Follow-up to e8423f9ce150 with discussionis in
https://github.com/bagder/curl/pull/258
This check scans for fopen() with a mode string without 'b' present, as
it may indicate that an FOPEN_* define should rather be used.
-rwxr-xr-x | lib/checksrc.pl | 9 | ||||
-rw-r--r-- | lib/checksrc.whitelist | 4 | ||||
-rw-r--r-- | lib/formdata.c | 4 | ||||
-rw-r--r-- | src/checksrc.whitelist | 2 | ||||
-rw-r--r-- | src/tool_operate.c | 2 |
5 files changed, 17 insertions, 4 deletions
diff --git a/lib/checksrc.pl b/lib/checksrc.pl index 292ad3424..8fad2cfcb 100755 --- a/lib/checksrc.pl +++ b/lib/checksrc.pl @@ -228,6 +228,15 @@ sub scanfile { "use of $2 is banned"); } + # scan for use of non-binary fopen without the macro + if($l =~ /^(.*\W)fopen\s*\([^"]*\"([^"]*)/) { + my $mode = $2; + if($mode !~ /b/) { + checkwarn($line, length($1), $file, $l, + "use of non-binary fopen without FOPEN_* macro"); + } + } + # check for open brace first on line but not first column # only alert if previous line ended with a close paren and wasn't a cpp # line diff --git a/lib/checksrc.whitelist b/lib/checksrc.whitelist index da7b75dc0..e261b9da1 100644 --- a/lib/checksrc.whitelist +++ b/lib/checksrc.whitelist @@ -4,3 +4,7 @@ 150 Opening ASCII mode data connection for [file] (0.0.0.0,0) (545 bytes) * no_proxy=domain1.dom,host.domain2.dom Default values are (0,0) initialized by calloc. + file = fopen(name, "r"); /* VMS */ + return fopen(file, "r"); /* VMS */ + return fopen(file, "r", "rfm=stmlf", "ctx=stm"); + curl_memlog("FILE %s:%d fopen(\"%s\",\"%s\") = %p\n", diff --git a/lib/formdata.c b/lib/formdata.c index cd98f3c6f..9e8ce4ea0 100644 --- a/lib/formdata.c +++ b/lib/formdata.c @@ -756,7 +756,7 @@ curl_off_t VmsRealFileSize(const char * name, int ret_stat; FILE * file; - file = fopen(name, "r"); + file = fopen(name, "r"); /* VMS */ if(file == NULL) return 0; @@ -1385,7 +1385,7 @@ static FILE * vmsfopenread(const char *file, const char *mode) { case FAB$C_VAR: case FAB$C_VFC: case FAB$C_STMCR: - return fopen(file, "r"); + return fopen(file, "r"); /* VMS */ break; default: return fopen(file, "r", "rfm=stmlf", "ctx=stm"); diff --git a/src/checksrc.whitelist b/src/checksrc.whitelist index 335d44329..b078ac1ae 100644 --- a/src/checksrc.whitelist +++ b/src/checksrc.whitelist @@ -1,3 +1,3 @@ * 'name=@filename,filename2,filename3' * 'name=@filename;type=image/gif,filename2,filename3' -
\ No newline at end of file + file = fopen(name, "r"); /* VMS */ diff --git a/src/tool_operate.c b/src/tool_operate.c index 4c3ed077b..fea587bc9 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -151,7 +151,7 @@ static curl_off_t vms_realfilesize(const char * name, int ret_stat; FILE * file; - file = fopen(name, "r"); + file = fopen(name, "r"); /* VMS */ if(file == NULL) { return 0; } |