View | Details | Raw Unified | Return to bug 1056 | Differences between
and this patch

Collapse All | Expand All

(-)readconf.c (-5 / +19 lines)
Lines 294-300 process_config_line(Options *options, co Link Here
294
		    int *activep)
294
		    int *activep)
295
{
295
{
296
	char *s, **charptr, *endofnumber, *keyword, *arg, *arg2, fwdarg[256];
296
	char *s, **charptr, *endofnumber, *keyword, *arg, *arg2, fwdarg[256];
297
	int opcode, *intptr, value;
297
	int opcode, *intptr, value, orig, scale;
298
	size_t len;
298
	size_t len;
299
	Forward fwd;
299
	Forward fwd;
300
300
Lines 467-486 parse_yesnoask: Link Here
467
			fatal("%.200s line %d: Missing argument.", filename, linenum);
467
			fatal("%.200s line %d: Missing argument.", filename, linenum);
468
		if (arg[0] < '0' || arg[0] > '9')
468
		if (arg[0] < '0' || arg[0] > '9')
469
			fatal("%.200s line %d: Bad number.", filename, linenum);
469
			fatal("%.200s line %d: Bad number.", filename, linenum);
470
		value = strtol(arg, &endofnumber, 10);
470
		orig = value = strtol(arg, &endofnumber, 10);
471
		if (arg == endofnumber)
471
		if (arg == endofnumber)
472
			fatal("%.200s line %d: Bad number.", filename, linenum);
472
			fatal("%.200s line %d: Bad number.", filename, linenum);
473
		switch (toupper(*endofnumber)) {
473
		switch (toupper(*endofnumber)) {
474
		case '\0':
475
			scale = 1;
476
			break;
474
		case 'K':
477
		case 'K':
475
			value *= 1<<10;
478
			scale = 1<<10;
476
			break;
479
			break;
477
		case 'M':
480
		case 'M':
478
			value *= 1<<20;
481
			scale = 1<<20;
479
			break;
482
			break;
480
		case 'G':
483
		case 'G':
481
			value *= 1<<30;
484
			scale = 1<<30;
482
			break;
485
			break;
486
		default:
487
			fatal("%.200s line %d: Invalid RekeyLimit suffix",
488
			    filename, linenum);
483
		}
489
		}
490
		value *= scale;
491
		/* detect integer wrap */
492
		if ((value / scale) != orig)
493
			fatal("%.200s line %d: RekeyLimit too large",
494
			    filename, linenum);
495
		if (value < 1024)
496
			fatal("%.200s line %d: RekeyLimit must be greater "
497
			    "than 1K", filename, linenum);
484
		if (*activep && *intptr == -1)
498
		if (*activep && *intptr == -1)
485
			*intptr = value;
499
			*intptr = value;
486
		break;
500
		break;

Return to bug 1056