Accepting request 841945 from Base:System
- fix [bsc#1177579] -- wrong clamping of hexadecimal digits in dc - deleted patches - bc-1.06-dc_ibase.patch (upstreamed) OBS-URL: https://build.opensuse.org/request/show/841945 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/bc?expand=0&rev=26factory
commit
1fae16c9eb
@ -1,60 +0,0 @@
|
||||
Index: dc/numeric.c
|
||||
===================================================================
|
||||
--- dc/numeric.c.orig
|
||||
+++ dc/numeric.c
|
||||
@@ -307,6 +307,8 @@ dc_getnum DC_DECLARG((input, ibase, read
|
||||
int digit;
|
||||
int decimal;
|
||||
int c;
|
||||
+ int c_buff = 0;
|
||||
+ int multi = 0;
|
||||
|
||||
bc_init_num(&tmp);
|
||||
bc_init_num(&build);
|
||||
@@ -324,6 +326,9 @@ dc_getnum DC_DECLARG((input, ibase, read
|
||||
}
|
||||
while (isspace(c))
|
||||
c = (*input)();
|
||||
+ c_buff = (*input)();
|
||||
+ if (isdigit(c_buff) || ('A' <= c_buff && c_buff <= 'F') || c_buff == '.')
|
||||
+ multi = 1;
|
||||
for (;;){
|
||||
if (isdigit(c))
|
||||
digit = c - '0';
|
||||
@@ -331,10 +336,15 @@ dc_getnum DC_DECLARG((input, ibase, read
|
||||
digit = 10 + c - 'A';
|
||||
else
|
||||
break;
|
||||
- c = (*input)();
|
||||
+ digit = multi ? (digit >= ibase ? ibase -1 : digit) : digit;
|
||||
bc_int2num(&tmp, digit);
|
||||
bc_multiply(result, base, &result, 0);
|
||||
bc_add(result, tmp, &result, 0);
|
||||
+ if (c_buff) {
|
||||
+ c = c_buff;
|
||||
+ c_buff = 0;
|
||||
+ } else
|
||||
+ c = (*input)();
|
||||
}
|
||||
if (c == '.'){
|
||||
bc_free_num(&build);
|
||||
@@ -343,13 +353,18 @@ dc_getnum DC_DECLARG((input, ibase, read
|
||||
build = bc_copy_num(_zero_);
|
||||
decimal = 0;
|
||||
for (;;){
|
||||
- c = (*input)();
|
||||
+ if (c_buff) {
|
||||
+ c = c_buff;
|
||||
+ c_buff = 0;
|
||||
+ } else
|
||||
+ c = (*input)();
|
||||
if (isdigit(c))
|
||||
digit = c - '0';
|
||||
else if ('A' <= c && c <= 'F')
|
||||
digit = 10 + c - 'A';
|
||||
else
|
||||
break;
|
||||
+ digit = digit >= ibase ? ibase -1 : digit;
|
||||
bc_int2num(&tmp, digit);
|
||||
bc_multiply(build, base, &build, 0);
|
||||
bc_add(build, tmp, &build, 0);
|
Loading…
Reference in New Issue