mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* sprintf.c (rb_f_sprintf): Fix a bug caused by an uninitialized
variable v, that a bignum unexpectedly gets converted into a string with its higher figures all filled with ./f/7/1, depending on the base. This bug seems to have been introduced in rev.1.27. * sprintf.c (rb_f_sprintf): Use switch instead of a sequence of else-if's. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3349 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									0df980f610
								
							
						
					
					
						commit
						b4406583e6
					
				
					 2 changed files with 40 additions and 11 deletions
				
			
		
							
								
								
									
										11
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								ChangeLog
									
										
									
									
									
								
							| 
						 | 
					@ -1,3 +1,14 @@
 | 
				
			||||||
 | 
					Fri Jan 17 03:33:42 2003  Akinori MUSHA  <knu@iDaemons.org>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						* sprintf.c (rb_f_sprintf): Fix a bug caused by an uninitialized
 | 
				
			||||||
 | 
						  variable v, that a bignum unexpectedly gets converted into a
 | 
				
			||||||
 | 
						  string with its higher figures all filled with ./f/7/1,
 | 
				
			||||||
 | 
						  depending on the base.  This bug seems to have been introduced
 | 
				
			||||||
 | 
						  in rev.1.27.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						* sprintf.c (rb_f_sprintf): Use switch instead of a sequence of
 | 
				
			||||||
 | 
						  else-if's.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Wed Jan 15 15:18:38 2003  moumar  <moumar@netcourrier.com>
 | 
					Wed Jan 15 15:18:38 2003  moumar  <moumar@netcourrier.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	* configure.in (ARCHFILE): set even unless --enable-shared on
 | 
						* configure.in (ARCHFILE): set even unless --enable-shared on
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										40
									
								
								sprintf.c
									
										
									
									
									
								
							
							
						
						
									
										40
									
								
								sprintf.c
									
										
									
									
									
								
							| 
						 | 
					@ -319,7 +319,7 @@ rb_f_sprintf(argc, argv)
 | 
				
			||||||
		char *prefix = 0;
 | 
							char *prefix = 0;
 | 
				
			||||||
		int sign = 0;
 | 
							int sign = 0;
 | 
				
			||||||
		char sc = 0;
 | 
							char sc = 0;
 | 
				
			||||||
		long v;
 | 
							long v = 0;
 | 
				
			||||||
		int base, bignum = 0;
 | 
							int base, bignum = 0;
 | 
				
			||||||
		int len, pos;
 | 
							int len, pos;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -338,11 +338,18 @@ rb_f_sprintf(argc, argv)
 | 
				
			||||||
		    break;
 | 
							    break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (flags & FSHARP) {
 | 
							if (flags & FSHARP) {
 | 
				
			||||||
		    if (*p == 'o') prefix = "0";
 | 
							    switch (*p) {
 | 
				
			||||||
		    else if (*p == 'x') prefix = "0x";
 | 
							      case 'o':
 | 
				
			||||||
		    else if (*p == 'X') prefix = "0X";
 | 
								prefix = "0"; break;
 | 
				
			||||||
		    else if (*p == 'b') prefix = "0b";
 | 
							      case 'x':
 | 
				
			||||||
		    else if (*p == 'B') prefix = "0B";
 | 
								prefix = "0x"; break;
 | 
				
			||||||
 | 
							      case 'X':
 | 
				
			||||||
 | 
								prefix = "0X"; break;
 | 
				
			||||||
 | 
							      case 'b':
 | 
				
			||||||
 | 
								prefix = "0b"; break;
 | 
				
			||||||
 | 
							      case 'B':
 | 
				
			||||||
 | 
								prefix = "0B"; break;
 | 
				
			||||||
 | 
							    }
 | 
				
			||||||
		    if (prefix) {
 | 
							    if (prefix) {
 | 
				
			||||||
			width -= strlen(prefix);
 | 
								width -= strlen(prefix);
 | 
				
			||||||
		    }
 | 
							    }
 | 
				
			||||||
| 
						 | 
					@ -369,10 +376,21 @@ rb_f_sprintf(argc, argv)
 | 
				
			||||||
		    goto bin_retry;
 | 
							    goto bin_retry;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (*p == 'u' || *p == 'd' || *p == 'i') base = 10;
 | 
							switch (*p) {
 | 
				
			||||||
		else if (*p == 'x' || *p == 'X') base = 16;
 | 
							  case 'o':
 | 
				
			||||||
		else if (*p == 'o') base = 8;
 | 
							    base = 8; break;
 | 
				
			||||||
		else if (*p == 'b' || *p == 'B') base = 2;
 | 
							  case 'x':
 | 
				
			||||||
 | 
							  case 'X':
 | 
				
			||||||
 | 
							    base = 16; break;
 | 
				
			||||||
 | 
							  case 'b':
 | 
				
			||||||
 | 
							  case 'B':
 | 
				
			||||||
 | 
							    base = 2; break;
 | 
				
			||||||
 | 
							  case 'u':
 | 
				
			||||||
 | 
							  case 'd':
 | 
				
			||||||
 | 
							  case 'i':
 | 
				
			||||||
 | 
							  default:
 | 
				
			||||||
 | 
							    base = 10; break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if (!bignum) {
 | 
							if (!bignum) {
 | 
				
			||||||
		    if (base == 2) {
 | 
							    if (base == 2) {
 | 
				
			||||||
			val = rb_int2big(v);
 | 
								val = rb_int2big(v);
 | 
				
			||||||
| 
						 | 
					@ -510,7 +528,7 @@ rb_f_sprintf(argc, argv)
 | 
				
			||||||
		    PUSH(prefix, plen);
 | 
							    PUSH(prefix, plen);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		CHECK(prec - len);
 | 
							CHECK(prec - len);
 | 
				
			||||||
		if (v < 0) {
 | 
							if (!bignum && v < 0) {
 | 
				
			||||||
		    char c = '.';
 | 
							    char c = '.';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		    switch (base) {
 | 
							    switch (base) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue