Changeset 39393
- Timestamp:
- Feb 26, 2016, 6:18:50 AM (10 years ago)
- Location:
- trunk/Ohana/src/libohana
- Files:
-
- 7 edited
-
Makefile (modified) (1 diff)
-
src/CommOps.c (modified) (2 diffs)
-
src/config.c (modified) (21 diffs)
-
src/findexec.c (modified) (3 diffs)
-
src/glockfile.c (modified) (1 diff)
-
src/ohana_allocate.c (modified) (8 diffs)
-
src/string.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/libohana/Makefile
r39338 r39393 66 66 $(DESTLIB)/libohana.$(DLLTYPE): $(LIB)/libohana.$(ARCH).$(DLLTYPE) 67 67 68 TESTPROG_XTRA = sprintf_floats 69 TESTPROG = memtest typetest string68 TESTPROG_XTRA = sprintf_floats memtest typetest string 69 TESTPROG = aliasing 70 70 71 71 $(TESTPROG) : % : $(TESTBIN)/% $(OBJS) -
trunk/Ohana/src/libohana/src/CommOps.c
r27435 r39393 209 209 210 210 if (buffer[0].Nbuffer < 16) return NULL; 211 memcpy (command, buffer[0].buffer, 16); 211 memcpy (command, buffer[0].buffer, 16); // SAFE 212 212 command[16] = 0; 213 213 … … 217 217 218 218 ALLOCATE (line, char, Nbytes + 1); 219 memcpy (line, &buffer[0].buffer[16], Nbytes); 219 memcpy (line, &buffer[0].buffer[16], Nbytes); // SAFE 220 220 line[Nbytes] = 0; 221 221 -
trunk/Ohana/src/libohana/src/config.c
r38553 r39393 2 2 3 3 # define D_NBYTES 4096 4 # define NXTRA 16 4 5 5 6 static char *ConfigVariable = (char *) NULL; … … 107 108 } 108 109 free (find); 109 110 /* we eliminate this option: this is just confusing */111 # if (0)112 /* look for ./.prognamerc */113 sprintf (find, ".%src", progname);114 status = stat (find, &filestat);115 if (status == 0) {116 /* file exists, can we read it? */117 if (((uid == filestat.st_uid) && (filestat.st_mode & S_IRUSR)) ||118 ((gid == filestat.st_gid) && (filestat.st_mode & S_IRGRP)) ||119 ( (filestat.st_mode & S_IROTH))) {120 return (find);121 }122 }123 # endif124 110 125 111 /* look for ~/.prognamerc */ … … 158 144 Nbytes = 0; 159 145 NBYTES = D_NBYTES; 160 ALLOCATE (ibuffer, char, NBYTES + 2);161 memset (ibuffer, 0, NBYTES + 2);146 ALLOCATE (ibuffer, char, NBYTES + NXTRA); 147 memset (ibuffer, 0, NBYTES + NXTRA); 162 148 163 149 /* load data from file */ … … 166 152 Nbytes += nbytes; 167 153 NBYTES += D_NBYTES; 168 REALLOCATE (ibuffer, char, NBYTES + 2);154 REALLOCATE (ibuffer, char, NBYTES + NXTRA); 169 155 } 170 156 Nbytes += nbytes; … … 178 164 } 179 165 if (ibuffer[Nbytes]) ibuffer[Nbytes] = 0; 166 myAssert (Nbytes < NBYTES, "oops"); 180 167 181 168 /* add the optional variables to the end of the input buffer */ … … 183 170 snprintf (line, 256, "%s %s\n", "CONFIG", ConfigVariable); 184 171 Ncpy = strlen (line); 185 if (Nbytes + Ncpy >= NBYTES - 1) {172 if (Nbytes + Ncpy >= NBYTES - NXTRA) { 186 173 NBYTES = Nbytes + Ncpy + D_NBYTES; 187 174 REALLOCATE (ibuffer, char, NBYTES); … … 194 181 snprintf (line, 256, "%s %s\n", DefineVariable[i], DefineValue[i]); 195 182 Ncpy = strlen (line); 196 if (Nbytes + Ncpy >= NBYTES - 1) {183 if (Nbytes + Ncpy >= NBYTES - NXTRA) { 197 184 NBYTES = Nbytes + Ncpy + D_NBYTES; 198 185 REALLOCATE (ibuffer, char, NBYTES); … … 202 189 ibuffer[Nbytes] = 0; 203 190 } 191 myAssert (Nbytes < NBYTES, "oops"); 204 192 205 193 /* loop over input buffer, interpolating 'input' lines until none are added */ … … 218 206 /* copy data from last point to before 'input' */ 219 207 Ncpy = next - last - 5; 220 if (Nout + Ncpy >= NBYTES - 1) {208 if (Nout + Ncpy >= NBYTES - NXTRA) { 221 209 NBYTES = Nout + Ncpy + D_NBYTES; 222 210 REALLOCATE (obuffer, char, NBYTES); … … 230 218 if (tbuffer != (char *) NULL) { 231 219 Ncpy = strlen (tbuffer); 232 if (Nout + Ncpy >= NBYTES - 1) {220 if (Nout + Ncpy >= NBYTES - NXTRA) { 233 221 NBYTES = Nout + Ncpy + D_NBYTES; 234 222 REALLOCATE (obuffer, char, NBYTES); … … 248 236 /* last set of bytes after last input */ 249 237 Ncpy = strlen (last); 250 if (Nout + Ncpy >= NBYTES - 1) {238 if (Nout + Ncpy >= NBYTES - NXTRA) { 251 239 NBYTES = Nout + Ncpy + D_NBYTES; 252 240 REALLOCATE (obuffer, char, NBYTES); … … 277 265 va_start (argp, Nentry); 278 266 279 int Nchar = strlen (field) + 16;267 int Nchar = strlen (field) + NXTRA; 280 268 ALLOCATE (tfield, char, Nchar); 281 269 snprintf (tfield, Nchar, "\n%s", field); … … 341 329 } 342 330 343 344 331 char *expandline (char *line, char *config) { 345 332 346 int Nin, Nout, Ncpy , NBYTES;333 int Nin, Nout, Ncpy; 347 334 char *p1, *p2, word[256], value[256]; 348 335 char *outline; 349 336 350 NBYTES = 256; 337 int DBYTES = 256; 338 int NBYTES = 256; 351 339 ALLOCATE (outline, char, NBYTES); 352 340 Nout = 0; … … 354 342 while ((p1 = strchr (&line[Nin], '$')) != (char *) NULL) { 355 343 Ncpy = p1 - line - Nin; 356 if (Nout + Ncpy >= NBYTES ) {357 NBYTES = Nout + Ncpy + 256;358 REALLOCATE (outline, char, NBYTES - 2);344 if (Nout + Ncpy >= NBYTES - NXTRA) { 345 NBYTES = Nout + Ncpy + DBYTES; 346 REALLOCATE (outline, char, NBYTES); 359 347 } 360 348 memcpy (&outline[Nout], &line[Nin], Ncpy); … … 373 361 } 374 362 Ncpy = strlen(value); 375 if (Nout + Ncpy >= NBYTES - 2) {376 NBYTES = Nout + Ncpy + 256;363 if (Nout + Ncpy >= NBYTES - NXTRA) { 364 NBYTES = Nout + Ncpy + DBYTES; 377 365 REALLOCATE (outline, char, NBYTES); 378 366 } … … 381 369 } 382 370 Ncpy = strlen(&line[Nin]); 383 if (Nout + Ncpy >= NBYTES - 2) {384 NBYTES = Nout + Ncpy + 256;371 if (Nout + Ncpy >= NBYTES - NXTRA) { 372 NBYTES = Nout + Ncpy + DBYTES; 385 373 REALLOCATE (outline, char, NBYTES); 386 374 } … … 409 397 Nbytes = 0; 410 398 NBYTES = D_NBYTES; 411 ALLOCATE_ZERO (ibuffer, char, NBYTES + 2);399 ALLOCATE_ZERO (ibuffer, char, NBYTES + NXTRA); 412 400 413 401 /* load data from file */ … … 415 403 Nbytes += nbytes; 416 404 NBYTES += D_NBYTES; 417 REALLOCATE (ibuffer, char, NBYTES + 2);418 memset (&ibuffer[NBYTES - D_NBYTES], 0, NBYTES - D_NBYTES + 2);405 REALLOCATE (ibuffer, char, NBYTES + NXTRA); 406 memset (&ibuffer[NBYTES - D_NBYTES], 0, NBYTES - D_NBYTES); 419 407 } 420 408 Nbytes += nbytes; … … 427 415 } 428 416 if (ibuffer[Nbytes]) ibuffer[Nbytes] = 0; 417 myAssert (Nbytes < NBYTES, "oops"); 429 418 430 419 if (options) { … … 433 422 snprintf (line, 256, "%s %s\n", "CONFIG", ConfigVariable); 434 423 Ncpy = strlen (line); 435 if (Nbytes + Ncpy >= NBYTES ) {424 if (Nbytes + Ncpy >= NBYTES - NXTRA) { 436 425 int Nbytes_old = NBYTES; 437 426 NBYTES = Nbytes + Ncpy + D_NBYTES; 438 REALLOCATE (ibuffer, char, NBYTES + 2);439 memset (&ibuffer[Nbytes_old], 0, NBYTES + 2- Nbytes_old);427 REALLOCATE (ibuffer, char, NBYTES + NXTRA); 428 memset (&ibuffer[Nbytes_old], 0, NBYTES - Nbytes_old); 440 429 } 441 430 memcpy (&ibuffer[Nbytes], line, Ncpy); … … 446 435 snprintf (line, 256, "%s %s\n", DefineVariable[i], DefineValue[i]); 447 436 Ncpy = strlen (line); 448 if (Nbytes + Ncpy >= NBYTES ) {437 if (Nbytes + Ncpy >= NBYTES - NXTRA) { 449 438 int Nbytes_old = NBYTES; 450 439 NBYTES = Nbytes + Ncpy + D_NBYTES; 451 REALLOCATE (ibuffer, char, NBYTES + 2);452 memset (&ibuffer[Nbytes_old], 0, NBYTES + 2- Nbytes_old);440 REALLOCATE (ibuffer, char, NBYTES + NXTRA); 441 memset (&ibuffer[Nbytes_old], 0, NBYTES - Nbytes_old); 453 442 } 454 443 memcpy (&ibuffer[Nbytes], line, Ncpy); -
trunk/Ohana/src/libohana/src/findexec.c
r38553 r39393 75 75 int status; 76 76 int valid; 77 78 myAssert (basefile, "oops"); 79 myAssert (basefile[0], "oops"); 77 80 78 81 uid = getuid(); … … 152 155 char *c, *file; 153 156 157 myAssert (strlen(infile), "invalid zero-length infile"); 158 154 159 /* make working version */ 155 160 file = strcreate (infile); … … 238 243 char *c, *file; 239 244 240 ALLOCATE (file, char, strlen(name) + 1 );245 ALLOCATE (file, char, strlen(name) + 16); 241 246 242 247 c = strrchr (name, '/'); -
trunk/Ohana/src/libohana/src/glockfile.c
r38553 r39393 4 4 5 5 int status; 6 char mode[ 3];6 char mode[16]; 7 7 int fd; 8 8 FILE *f; -
trunk/Ohana/src/libohana/src/ohana_allocate.c
r39324 r39393 5 5 # include <pthread.h> 6 6 # include <string.h> 7 # include <errno.h> 7 8 8 9 # define TEST_SAVE_FREE_BLOCKS 0 … … 53 54 54 55 // total size is : memblock + data + endpost 55 new = (OhanaMemblock *) malloc (sizeof(OhanaMemblock) + size + sizeof(void *));56 new = (OhanaMemblock *) malloc (sizeof(OhanaMemblock) + size + 2*sizeof(void *)); 56 57 if (new == NULL) ohana_memabort ("failed to allocate memory (%s, %d, %s)\n", file, line, func); 58 if (errno == ENOMEM) abort(); 57 59 58 60 // pointer to the start of the user memory … … 71 73 new->freed = FALSE; 72 74 73 // to be clean, zero out thememory74 // memset (ptr, 0, new->size);75 // poison the whole memory: we should not rely of 0'ed memory 76 memset (ptr, 0x7f, new->size); 75 77 76 78 // new memblock becomes the 'lastBlock': … … 98 100 Nblock ++; 99 101 pthread_mutex_unlock(&memBlockListMutex); 102 103 if (!new->nextBlock && !new->prevBlock && (Nblock > 1)) abort(); 100 104 101 105 return (ptr); … … 219 223 220 224 ref = (OhanaMemblock *) in - 1; 225 if (!ref->nextBlock && !ref->prevBlock && (Nblock > 1)) ohana_memabort ("orphan block?? (%s@%d : %s)\n", file, line, func); 221 226 222 227 if (ref->freed) ohana_memabort ("memory already freed (%s, %d, %s [%d bytes])\n", ref->file, ref->line, ref->func, ref->size); 228 // if (!ref->nextBlock && !ref->prevBlock && (Nblock > 1)) ohana_memabort ("orphan block?? (%s@%d : %s)\n", file, line, func); 229 223 230 ref->freed = TRUE; 231 if (!ref->nextBlock && !ref->prevBlock && (Nblock > 1)) ohana_memabort ("orphan block?? (%s@%d : %s)\n", file, line, func); 224 232 225 233 // fprintf (stderr, " file: %s, line: %d, func: %s, size: %zd, addr: %zx\n", … … 227 235 228 236 if (!lastBlock) ohana_memabort ("corruption? (%s@%d : %s)\n", file, line, func); 237 if (!ref->nextBlock && !ref->prevBlock && (Nblock > 1)) ohana_memabort ("orphan block?? (%s@%d : %s)\n", file, line, func); 229 238 230 239 pthread_mutex_lock(&memBlockListMutex); … … 260 269 // pointer to the start of the user memory 261 270 void *ptr = (char *)(ref + 1); 262 memset (ptr, 0x7 7, ref->size);271 memset (ptr, 0x7f, ref->size); 263 272 264 273 Nblock --; … … 268 277 269 278 # if (!TEST_SAVE_FREE_BLOCKS) 279 memset (ref, 0x7f, sizeof(OhanaMemblock)); 270 280 free (ref); 271 281 # endif -
trunk/Ohana/src/libohana/src/string.c
r38441 r39393 186 186 line[i] = c; 187 187 } 188 line[i - 1] = 0; /* this could make things crash! */188 if (i > 0) line[i - 1] = 0; /* this could make things crash! */ 189 189 190 190 if (i > 1) {
Note:
See TracChangeset
for help on using the changeset viewer.
