From 543519d04838896811139e0596d235ce398d8a7b Mon Sep 17 00:00:00 2001 From: naruse Date: Wed, 28 Mar 2018 13:45:50 +0000 Subject: Revert wrong commit r62976-r62978 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@63010 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/sdbm/_sdbm.c | 48 ++++++++++++++---------------------------------- ext/sdbm/init.c | 1 - ext/sdbm/sdbm.h | 2 +- 3 files changed, 15 insertions(+), 36 deletions(-) (limited to 'ext') diff --git a/ext/sdbm/_sdbm.c b/ext/sdbm/_sdbm.c index e598946e79..3a42b0e569 100644 --- a/ext/sdbm/_sdbm.c +++ b/ext/sdbm/_sdbm.c @@ -66,7 +66,7 @@ static datum getpair proto((char *, datum)); static int delpair proto((char *, datum)); static int chkpage proto((char *)); static datum getnkey proto((char *, int)); -static int splpage proto((char *, char *, long)); +static void splpage proto((char *, char *, long)); #if SEEDUPS static int duppair proto((char *, datum)); #endif @@ -128,7 +128,7 @@ static int makroom proto((DBM *, long, int)); #define OFF_PAG(off) (long) (off) * PBLKSIZ #define OFF_DIR(off) (long) (off) * DBLKSIZ -static const long masks[] = { +static long masks[] = { 000000000000L, 000000000001L, 000000000003L, 000000000007L, 000000000017L, 000000000037L, 000000000077L, 000000000177L, 000000000377L, @@ -142,7 +142,7 @@ static const long masks[] = { 007777777777L, 017777777777L }; -const datum nullitem = {NULL, 0}; +datum nullitem = {NULL, 0}; DBM * sdbm_open(register char *file, register int flags, register int mode) @@ -384,8 +384,7 @@ makroom(register DBM *db, long int hash, int need) /* * split the current page */ - if (splpage(pag, new, db->hmask + 1)) - return 0; + (void) splpage(pag, new, db->hmask + 1); /* * address of the new page */ @@ -722,12 +721,8 @@ getpair(char *pag, datum key) if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0) return nullitem; - n = GET_SHORT(ino,i + 1); - if (n <= 0 || n > PBLKSIZ) - return nullitem; - - val.dptr = pag + n; - val.dsize = GET_SHORT(ino,i) - n; + val.dptr = pag + GET_SHORT(ino,i + 1); + val.dsize = GET_SHORT(ino,i) - GET_SHORT(ino,i + 1); return val; } @@ -752,16 +747,10 @@ getnkey(char *pag, int num) if (GET_SHORT(ino,0) == 0 || num > GET_SHORT(ino,0)) return nullitem; - off = PBLKSIZ; - if (num > 1 && ((off = GET_SHORT(ino,num - 1)) < 0 || off > PBLKSIZ)) - return nullitem; - - num = GET_SHORT(ino,num); - if (num < 0 || num > off) - return nullitem; + off = (num > 1) ? GET_SHORT(ino,num - 1) : PBLKSIZ; - key.dptr = pag + num; - key.dsize = off - num; + key.dptr = pag + GET_SHORT(ino,num); + key.dsize = off - GET_SHORT(ino,num); return key; } @@ -852,12 +841,11 @@ seepair(char *pag, register int n, register char *key, register int siz) return 0; } -static int +static void splpage(char *pag, char *new, long int sbit) { datum key; datum val; - int error = 0; register int n; register int off = PBLKSIZ; @@ -870,16 +858,10 @@ splpage(char *pag, char *new, long int sbit) n = GET_SHORT(ino,0); for (ino++; n > 0; ino += 2) { - int k = GET_SHORT(ino,0); - int v = GET_SHORT(ino,1); - if (k < 0 || k > off || v < 0 || v > k) { - error = 1; - break; - } - key.dptr = cur + k; - key.dsize = off - k; - val.dptr = cur + v; - val.dsize = k - v; + key.dptr = cur + GET_SHORT(ino,0); + key.dsize = off - GET_SHORT(ino,0); + val.dptr = cur + GET_SHORT(ino,1); + val.dsize = GET_SHORT(ino,0) - GET_SHORT(ino,1); /* * select the page pointer (by looking at sbit) and insert */ @@ -892,8 +874,6 @@ splpage(char *pag, char *new, long int sbit) debug(("%d split %d/%d\n", ((short *) cur)[0] / 2, ((short *) new)[0] / 2, ((short *) pag)[0] / 2)); - - return error; } /* diff --git a/ext/sdbm/init.c b/ext/sdbm/init.c index 4a738debd6..f28eeb2f5e 100644 --- a/ext/sdbm/init.c +++ b/ext/sdbm/init.c @@ -826,7 +826,6 @@ fsdbm_each_pair(VALUE obj) GetDBM2(obj, dbmp, dbm); for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) { val = sdbm_fetch(dbm, key); - if (!val.dptr) rb_raise(rb_eDBMError, "not found"); keystr = rb_external_str_new(key.dptr, key.dsize); valstr = rb_external_str_new(val.dptr, val.dsize); rb_yield(rb_assoc_new(keystr, valstr)); diff --git a/ext/sdbm/sdbm.h b/ext/sdbm/sdbm.h index ba83c41ed4..c3b53c4a8f 100644 --- a/ext/sdbm/sdbm.h +++ b/ext/sdbm/sdbm.h @@ -52,7 +52,7 @@ typedef struct { int dsize; } datum; -extern const datum nullitem; +extern datum nullitem; #if defined(__STDC__) #define proto(p) p -- cgit v1.2.3