Text  |   XML   |   Visible Warnings:

Pvm : Pvm analysis 1 : Null Pointer Dereference  at pvmd.c:5259

Categories: LANG.MEM.NPD CWE:476
Warning ID: 2547.2578
Procedure: varsub
Trace: View
Modified: Wed Sep 2 12:40:54 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
   /u1/paul/SATE/2010/c/pvm/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: 2556.2587) */
 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: 2549.2580) */
 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: 2677.2726) */  /* Negative Character Value (ID: 2418.2435) */
 5234                                 p++;
 5235                         c = *p;
 5236                         *p = 0;
 5237  
 5238                         vv = getenv(vn);   /* Buffer Overrun (ID: 2676.2725) */
 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_4381071 <= 40955259                                 strncpy(r + rl, vv, l);     /* Null Pointer Dereference */  /* Buffer Overrun (ID: 2546.2577) */
Preconditions
&$unknown_482753 >= $param_1 + 2
&$unknown_482754 >= 8
((char*)$param_1)[1] = 123
*$param_1 = 36
strlen($param_1) != 0
strlen($param_1) != 1
((char*)&$unknown_482753)[1] = 125
$input_12 = &$unknown_482754
$input_12 >= 8
Postconditions
strlen(&$unknown_482753)' != 1
c' = ((char*)&$unknown_482753)[1]
$heap_32229' = $input_60
bytes_after(&$heap_32229)' = $input_12 + 1
$heap_32229' is allocated by malloc
$heap_32229' is a non-heap object
bytes_before(&$heap_32229)' = 0
strlen(&$heap_32229)' = $input_12
l' = &$unknown_482754
p' = &$unknown_482753 + 2
r' = 0
rl' = 0
rm' = &$unknown_482754 + 1
s' = $param_1
vn' = $param_1 + 2
vv' = &$heap_32229




Change Warning 2547.2578 : Null Pointer Dereference

Priority:
State:
Finding:
Owner:
Note: