Text  |   XML   |   Visible Warnings:

pvm3.4.6 : pvm3.4.6 analysis 2 : Null Pointer Dereference  at pvmd.c:5265

Categories: LANG.MEM.NPD CWE:476
Warning ID: 135.28756
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 * 
 5206 varsub(s) 
 5207         char *s;
 5208 {
 5209         int rm = 8;             /* length of result string space */ 
 5210         char *r;                /* result string */ 
 5211         int rl = 0;
 5212         char *p;
 5213         char *vn, *vv;
 5214         char c;
 5215         int l;
 5216  
 5217         r = TALLOC(rm, char, "var");
 5218         while (*s) {   /* Null Pointer Dereference (ID: 143.28764) */
 5219                 for (p = s; *p && *p != '$'; p++) ;
 5220                 if (l = p - s) {
 5221                         if (rl + l >= rm) {
 5222                                 rm = rl + l + 1;
 5223                                 r = TREALLOC(r, rm, char);
 5224                         }
 5225                         strncpy(r + rl, s, l);   /* Null Pointer Dereference (ID: 138.28759) */
 5226                         rl += l;
 5227                 }
 5228                 s = p++;
 5229                 if (*s == '$') {
 5230                         if (*p == '{')
 5231                                 p++;
 5232                         vn = p;
 5233                         while (isalnum(*p) || *p == '_')   /* Buffer Overrun (ID: 22085.28922) */  /* 2 more... */
 5234                                 p++;
 5235                         c = *p;
 5236                         *p = 0;
 5237  
 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  
 5245                         *p = c;
 5246                         if (*p == '}')
 5247                                 p++;
 5248                         if (vv)
 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;
true5257                                         r = TREALLOC(r, rm, char);
 5258                                 }
 5259                                 strncpy(r + rl, vv, l);   /* Null Pointer Dereference (ID: 137.28758) */  /* Buffer Overrun (ID: 136.28757) */
 5260                                 rl += l;
 5261                         }
 5262                         s = p;
 5263                 }
 5264         }
r <= 40955265         r[rl] = 0;     /* Null Pointer Dereference */
Preconditions
&$unknown_455699 >= &$unknown_455695 + 3
&$unknown_455700 >= 1
*s != 0
strlen(s) != 0
$unknown_455695 != 0
$unknown_455695 != 36
strlen(&$unknown_455695) != 0
strlen(&$unknown_455695) != 2
strlen(&$unknown_455695) != 1
((char*)&$unknown_455695)[2] = 123
((char*)&$unknown_455695)[1] = 36
((char*)&$unknown_455699)[2] = 0
((char*)&$unknown_455699)[1] = 125
$input_12 = &$unknown_455700
$input_12 >= 1
Postconditions
strlen(&$unknown_455699)' = 2
$unknown_455701' = $input_444
strlen(&$unknown_455701)' != &$unknown_455700 - 1
c' = ((char*)&$unknown_455699)[1]
errno' != 0
bytes_before(&$heap_65184)' = 0
$heap_65185' = $input_444
bytes_after(&$heap_65185)' = $input_12 + 1
$heap_65185' is allocated by malloc
$heap_65185' is a non-heap object
bytes_before(&$heap_65185)' = 0
strlen(&$heap_65185)' = $input_12
l' = &$unknown_455700
p' = &$unknown_455699 + 2
r' = 0
s' = &$unknown_455699 + 2
vn' = &$unknown_455695 + 3
vv' = &$heap_65185




Change Warning 135.28756 : Null Pointer Dereference

Priority:
State:
Finding:
Owner:
Note: