From b769a318ef61c9662e0070833d0b7444cb5fd5b2 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Wed, 29 Dec 2021 11:55:58 +0900 Subject: [PATCH] use unsigned char* in sexp_update_string_index_lookup (fixes issue #804) --- lib/chibi/io.sld | 2 +- lib/chibi/io/io.stub | 2 +- sexp.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/chibi/io.sld b/lib/chibi/io.sld index 40151301..f056258a 100644 --- a/lib/chibi/io.sld +++ b/lib/chibi/io.sld @@ -1,6 +1,6 @@ (define-library (chibi io) - (export read-string read-string! read-line write-line + (export read-string read-string! read-line write-line %%read-line port-fold port-fold-right port-map port->list port->string-list port->sexp-list port->string port->bytevector diff --git a/lib/chibi/io/io.stub b/lib/chibi/io/io.stub index c0c331b6..c447d2e5 100644 --- a/lib/chibi/io/io.stub +++ b/lib/chibi/io/io.stub @@ -1,5 +1,5 @@ -(define-c non-null-string (%%read-line "fgets") +(define-c non-null-string (%%read-line "fgets_unlocked") ((result (array char arg1)) int (default (current-input-port) input-port))) ;;(define-c size_t (%%read-string "fread") diff --git a/sexp.c b/sexp.c index 1bdd9c24..2fbdb2f1 100644 --- a/sexp.c +++ b/sexp.c @@ -1298,7 +1298,7 @@ sexp sexp_string_cursor_offset (sexp ctx, sexp self, sexp_sint_t n, sexp cur) { #if SEXP_USE_STRING_INDEX_TABLE void sexp_update_string_index_lookup(sexp ctx, sexp s) { - char *p; + unsigned char *p; sexp_sint_t numchunks, len, i, *chunks; sexp_gc_var1(tmp); if (sexp_string_size(s) < SEXP_STRING_INDEX_TABLE_CHUNK_SIZE*1.2) { @@ -1312,12 +1312,12 @@ void sexp_update_string_index_lookup(sexp ctx, sexp s) { sexp_string_charlens(s) = sexp_make_bytes_op(ctx, NULL, 2, sexp_make_fixnum(numchunks * sizeof(sexp_sint_t)), SEXP_VOID); chunks = (sexp_sint_t*)sexp_bytes_data(sexp_string_charlens(s)); - p = sexp_string_data(s); + p = (unsigned char*) sexp_string_data(s); i = 0; while (1) { p += sexp_utf8_initial_byte_count(*p); if (++i % SEXP_STRING_INDEX_TABLE_CHUNK_SIZE == 0) { - chunks[i/SEXP_STRING_INDEX_TABLE_CHUNK_SIZE - 1] = p - sexp_string_data(s); + chunks[i/SEXP_STRING_INDEX_TABLE_CHUNK_SIZE - 1] = p - (unsigned char*) sexp_string_data(s); if (i / SEXP_STRING_INDEX_TABLE_CHUNK_SIZE >= numchunks-1) break; }