Text  |   XML   |   Visible Warnings:

Pvm : Pvm analysis 1 : Buffer Overrun  at pvmd.c:5259

Categories: LANG.MEM.BO CWE:120 CWE:121 CWE:122 CWE:126
Warning ID: 2546.2577
Procedure: varsub
Trace: View
Modified: Wed Sep 2 12:40:53 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 * 
&$unknown_482274 > bytes_after(&$unknown_482276)5206 varsub(s) 
 5207         char *s;
 5208 {
&$unknown_482283 > bytes_after(&$unknown_482285)5209         int rm = 8;             /* length of result string space */ 
 5210         char *r;                /* result string */ 
&$unknown_482292 > bytes_after(&$unknown_482294)5211         int rl = 0;
 5212         char *p;
 5213         char *vn, *vv;
 5214         char c;
 5215         int l;
 5216  
&$unknown_482300 > bytes_after(&$unknown_482302)5217         r = TALLOC(rm, char, "var");
&$unknown_482332 > bytes_after(&$unknown_482334)5218         while (*s) {   /* Null Pointer Dereference (ID: 2556.2587) */
&$unknown_482344 > bytes_after(&$unknown_482346)5219                 for (p = s; *p && *p != '$'; p++) ;
 5220                 if (l = p - s) {
&$unknown_482373 > bytes_after(&$unknown_482375)5221                         if (rl + l >= rm) {
&$unknown_482377 > bytes_after(&$unknown_482379)5222                                 rm = rl + l + 1;
&$unknown_482381 > bytes_after(&$unknown_482383)5223                                 r = TREALLOC(r, rm, char);
 5224                         }
&$unknown_482404 > bytes_after(&$unknown_482406)5225                         strncpy(r + rl, s, l);   /* Null Pointer Dereference (ID: 2549.2580) */
&$unknown_482422 > bytes_after(&$unknown_482424)5226                         rl += l;
 5227                 }
&$unknown_482426 > bytes_after(rl)5228                 s = p++;
&$unknown_482432 > bytes_after(rl)5229                 if (*s == '$') {
&$unknown_482434 > bytes_after(rl)5230                         if (*p == '{')
&$unknown_482436 > bytes_after(rl)5231                                 p++;
&$unknown_482438 > bytes_after(rl)5232                         vn = p;
&$unknown_482440 > bytes_after(rl)5233                         while (isalnum(*p) || *p == '_')   /* Buffer Overrun (ID: 2677.2726) */  /* Negative Character Value (ID: 2418.2435) */
 5234                                 p++;
&$unknown_482446 > bytes_after(rl)5235                         c = *p;
&$unknown_482447 > bytes_after(rl)5236                         *p = 0;
 5237  
&$unknown_482448 > bytes_after(rl)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  
&$unknown_482452 > bytes_after(rl)5245                         *p = c;
&$unknown_482453 > bytes_after(rl)5246                         if (*p == '}')
&$unknown_482454 > bytes_after(rl)5247                                 p++;
&$unknown_482455 > bytes_after(rl)5248                         if (vv)
&$unknown_482456 > 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_482463)5259                                 strncpy(r + rl, vv, l);     /* Buffer Overrun */  /* Null Pointer Dereference (ID: 2547.2578) */
 5260                                 rl += l;
 5261                         }
 5262                         s = p;
Preconditions
&$unknown_482473 >= &$unknown_482470 + 3
&$unknown_482474 >= 1
*$param_1 != 0
strlen($param_1) != 0
$unknown_482470 != 0
$unknown_482470 != 36
strlen(&$unknown_482470) != 0
strlen(&$unknown_482470) != 2
strlen(&$unknown_482470) != 1
((char*)&$unknown_482470)[2] = 123
((char*)&$unknown_482470)[1] = 36
((char*)&$unknown_482473)[1] = 125
$input_12 = &$unknown_482474
$input_12 >= 1
Postconditions
strlen(&$unknown_482473)' != 1
$unknown_482476' = $input_60
c' = ((char*)&$unknown_482473)[1]
$heap_32134' is allocated by malloc
bytes_before(&$heap_32134)' = 0
$heap_32135' = $input_60
bytes_after(&$heap_32135)' = $input_12 + 1
$heap_32135' is allocated by malloc
$heap_32135' is a non-heap object
bytes_before(&$heap_32135)' = 0
strlen(&$heap_32135)' = $input_12
l' = &$unknown_482474
p' = &$unknown_482473 + 2
r' = 0
rm' >= 0
s' = &$unknown_482470 + 1
vn' = &$unknown_482470 + 3
vv' = &$heap_32135




Change Warning 2546.2577 : Buffer Overrun

Priority:
State:
Finding:
Owner:
Note: