Text  |   XML   |   Visible Warnings:

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

Categories: LANG.MEM.NPD CWE:476
Warning ID: 137.28758
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 */ 
true5211         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;
rl <= 40955257                                         r = TREALLOC(r, rm, char);
 5258                                 }
&$unknown_456726 <= 40955259                                 strncpy(r + rl, vv, l);     /* Null Pointer Dereference */  /* Buffer Overrun (ID: 136.28757) */
Preconditions
&$unknown_456729 <= &$unknown_456730 - 3
&$unknown_456729 >= s
&$unknown_456731 >= 8
*s != 0
*s != 36
strlen(s) != 0
$unknown_456729 != 0
$unknown_456729 != 36
strlen(&$unknown_456729) != 2
strlen(&$unknown_456729) <= &$unknown_456731
strlen(&$unknown_456729) > 1
((char*)&$unknown_456729)[2] = 123
((char*)&$unknown_456729)[1] = 36
((char*)&$unknown_456730)[1] = 125
Postconditions
strlen(&$unknown_456730)' != 1
c' = ((char*)&$unknown_456730)[1]
errno' != 0
l' = &$unknown_456731
p' = &$unknown_456730 + 2
r' = 0
rl' = 0
rm' = &$unknown_456731 + 1
s' = &$unknown_456729 + 1
vn' = &$unknown_456729 + 3
vv' = &$unknown_456729 + 1




Change Warning 137.28758 : Null Pointer Dereference

Priority:
State:
Finding:
Owner:
Note: