Text  |   XML   |   Visible Warnings:

pvm3.4.6 : pvm3.4.6 analysis 2 : Buffer Overrun  at pvmd.c:5259

Categories: LANG.MEM.BO CWE:120 CWE:121 CWE:122 CWE:126
Warning ID: 136.28757
Procedure: varsub
Trace: view
Modified: Thu Nov 26 11:27:44 2009   show details
 
Priority: None
State: None
Finding: None
Owner: None
  edit properties

Legend [ X ]
Warning Location
Contributes
Parse Error
Other Warning
Two or More Loop Iterations
On Execution Path
Comment
Macro
Preprocessor
Include
Keyword
Preprocessed Away

Source  |  Language: C Hide Legend     
ProblemLineSource
   /kat0/fletcher/SATE/2010/pvm3/src/pvmd.c
   Enter varsub
 5205 char * 
&$unknown_456083 > bytes_after(&$unknown_456085)5206 varsub(s) 
 5207         char *s;
 5208 {
&$unknown_456092 > bytes_after(&$unknown_456094)5209         int rm = 8;             /* length of result string space */ 
 5210         char *r;                /* result string */ 
&$unknown_456101 > bytes_after(&$unknown_456103)5211         int rl = 0;
 5212         char *p;
 5213         char *vn, *vv;
 5214         char c;
 5215         int l;
 5216  
&$unknown_456110 > bytes_after(&$unknown_456112)5217         r = TALLOC(rm, char, "var");
&$unknown_456146 > bytes_after(&$unknown_456148)5218         while (*s) {   /* Null Pointer Dereference (ID: 143.28764) */
 5219                 for (p = s; *p && *p != '$'; p++) ;
&$unknown_456174 > bytes_after(&$unknown_456175)5220                 if (l = p - s) {
&$unknown_456180 > bytes_after(&$unknown_456182)5221                         if (rl + l >= rm) {
&$unknown_456184 > bytes_after(&$unknown_456186)5222                                 rm = rl + l + 1;
&$unknown_456188 > bytes_after(&$unknown_456190)5223                                 r = TREALLOC(r, rm, char);
 5224                         }
 5225                         strncpy(r + rl, s, l);   /* Null Pointer Dereference (ID: 138.28759) */
&$unknown_456227 > bytes_after(&$unknown_456228)5226                         rl += l;
 5227                 }
&$unknown_456230 > bytes_after(rl)5228                 s = p++;
&$unknown_456236 > bytes_after(rl)5229                 if (*s == '$') {
&$unknown_456238 > bytes_after(rl)5230                         if (*p == '{')
&$unknown_456240 > bytes_after(rl)5231                                 p++;
&$unknown_456242 > bytes_after(rl)5232                         vn = p;
&$unknown_456244 > bytes_after(rl)5233                         while (isalnum(*p) || *p == '_')   /* Buffer Overrun (ID: 22085.28922) */  /* 2 more... */
 5234                                 p++;
&$unknown_456250 > bytes_after(rl)5235                         c = *p;
&$unknown_456251 > bytes_after(rl)5236                         *p = 0;
 5237  
&$unknown_456252 > bytes_after(rl)5238                         vv = getenv(vn);   /* Buffer Overrun (ID: 22084.28921) */  /* Buffer Overrun (ID: 22067.28896) */
 5239  
 5240 #ifdef WIN32 
 5241                         if (!vv)
 5242                                 vv = (char *) read_pvmregistry(vn); 
 5243 #endif 
 5244  
&$unknown_456256 > bytes_after(rl)5245                         *p = c;
&$unknown_456257 > bytes_after(rl)5246                         if (*p == '}')
&$unknown_456258 > bytes_after(rl)5247                                 p++;
&$unknown_456259 > bytes_after(rl)5248                         if (vv)
&$unknown_456260 > bytes_after(rl)5249                                 l = strlen(vv);
 5250                         else {
 5251                                 vv = s;
 5252                                 l = p - s;
 5253                         }
 5254                         if (l) {
 5255                                 if (rl + l >= rm) {
 5256                                         rm = rl + l + 1;
l > bytes_after(rl)5257                                         r = TREALLOC(r, rm, char);
 5258                                 }
l > bytes_after(&$unknown_456264)5259                                 strncpy(r + rl, vv, l);     /* Buffer Overrun */  /* Null Pointer Dereference (ID: 137.28758) */
 5260                                 rl += l;
 5261                         }
 5262                         s = p;
Preconditions
&$unknown_456274 >= &$unknown_456270 + 3
&$unknown_456275 >= 1
*s != 0
strlen(s) != 0
$unknown_456270 != 0
$unknown_456270 != 36
strlen(&$unknown_456270) != 0
strlen(&$unknown_456270) != 2
strlen(&$unknown_456270) != 1
((char*)&$unknown_456270)[2] = 123
((char*)&$unknown_456270)[1] = 36
((char*)&$unknown_456274)[1] = 125
$input_12 = &$unknown_456275
$input_12 >= 1
Postconditions
strlen(&$unknown_456274)' != 1
$unknown_456277' = $input_444
c' = ((char*)&$unknown_456274)[1]
errno' != 0
bytes_before(&$heap_65327)' = 0
$heap_65328' = $input_444
bytes_after(&$heap_65328)' = $input_12 + 1
$heap_65328' is allocated by malloc
$heap_65328' is a non-heap object
bytes_before(&$heap_65328)' = 0
strlen(&$heap_65328)' = $input_12
l' = &$unknown_456275
p' = &$unknown_456274 + 2
r' = 0
s' = &$unknown_456270 + 1
vn' = &$unknown_456270 + 3
vv' = &$heap_65328




Change Warning 136.28757 : Buffer Overrun

Priority:
State:
Finding:
Owner:
Note: