diff options
| author | Mike Pall <mike> | 2012-10-02 11:56:33 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2012-10-02 11:56:33 +0200 |
| commit | 0d7094f36e62854d882c528efb634210b6c9455d (patch) | |
| tree | 7ca148dd819501007e04216448eba2df179b3ae5 | |
| parent | b66ab96a629892ade0e0b68ca50a7e850b7e37ec (diff) | |
| download | luajit-0d7094f36e62854d882c528efb634210b6c9455d.tar.gz luajit-0d7094f36e62854d882c528efb634210b6c9455d.tar.bz2 luajit-0d7094f36e62854d882c528efb634210b6c9455d.zip | |
From Lua 5.2: Return nil for bad position in string.find().
Needs -DLUAJIT_ENABLE_LUA52COMPAT.
| -rw-r--r-- | src/lib_string.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/lib_string.c b/src/lib_string.c index d894f9f4..9c4cee8b 100644 --- a/src/lib_string.c +++ b/src/lib_string.c | |||
| @@ -487,10 +487,16 @@ static int str_find_aux(lua_State *L, int find) | |||
| 487 | const char *s = luaL_checklstring(L, 1, &l1); | 487 | const char *s = luaL_checklstring(L, 1, &l1); |
| 488 | const char *p = luaL_checklstring(L, 2, &l2); | 488 | const char *p = luaL_checklstring(L, 2, &l2); |
| 489 | ptrdiff_t init = posrelat(luaL_optinteger(L, 3, 1), l1) - 1; | 489 | ptrdiff_t init = posrelat(luaL_optinteger(L, 3, 1), l1) - 1; |
| 490 | if (init < 0) | 490 | if (init < 0) { |
| 491 | init = 0; | 491 | init = 0; |
| 492 | else if ((size_t)(init) > l1) | 492 | } else if ((size_t)(init) > l1) { |
| 493 | #if LJ_52 | ||
| 494 | setnilV(L->top-1); | ||
| 495 | return 1; | ||
| 496 | #else | ||
| 493 | init = (ptrdiff_t)l1; | 497 | init = (ptrdiff_t)l1; |
| 498 | #endif | ||
| 499 | } | ||
| 494 | if (find && (lua_toboolean(L, 4) || /* explicit request? */ | 500 | if (find && (lua_toboolean(L, 4) || /* explicit request? */ |
| 495 | strpbrk(p, SPECIALS) == NULL)) { /* or no special characters? */ | 501 | strpbrk(p, SPECIALS) == NULL)) { /* or no special characters? */ |
| 496 | /* do a plain search */ | 502 | /* do a plain search */ |
