mirror of
				https://github.com/janet-lang/janet
				synced 2025-11-04 09:33:02 +00:00 
			
		
		
		
	Update janet_getcbytes to padd buffers with trailing 0.
This commit is contained in:
		@@ -216,12 +216,31 @@ const char *janet_getcstring(const Janet *argv, int32_t n) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *janet_getcbytes(const Janet *argv, int32_t n) {
 | 
			
		||||
    /* Ensure buffer 0-padded */
 | 
			
		||||
    if (janet_checktype(argv[n], JANET_BUFFER)) {
 | 
			
		||||
        JanetBuffer *b = janet_unwrap_buffer(argv[n]);
 | 
			
		||||
        if (b->gc.flags & JANET_BUFFER_FLAG_NO_REALLOC) {
 | 
			
		||||
            /* Make a copy with janet_smalloc in the rare case we have a buffer that cannot be realloced */
 | 
			
		||||
            char *new_string = janet_smalloc(b->count + 1);
 | 
			
		||||
            memcpy(new_string, b->data, b->count);
 | 
			
		||||
            new_string[b->count] = 0;
 | 
			
		||||
            if (strlen(new_string) != (size_t) b->count) goto badzeros;
 | 
			
		||||
            return new_string;
 | 
			
		||||
        } else {
 | 
			
		||||
            /* Ensure trailing 0 */
 | 
			
		||||
            janet_buffer_push_u8(b, 0);
 | 
			
		||||
            b->count--;
 | 
			
		||||
            if (strlen((char *)b->data) != (size_t) b->count) goto badzeros;
 | 
			
		||||
            return (const char *) b->data;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    JanetByteView view = janet_getbytes(argv, n);
 | 
			
		||||
    const char *cstr = (const char *)view.bytes;
 | 
			
		||||
    if (strlen(cstr) != (size_t) view.len) {
 | 
			
		||||
        janet_panic("bytes contain embedded 0s");
 | 
			
		||||
    }
 | 
			
		||||
    if (strlen(cstr) != (size_t) view.len) goto badzeros;
 | 
			
		||||
    return cstr;
 | 
			
		||||
 | 
			
		||||
badzeros:
 | 
			
		||||
    janet_panic("bytes contain embedded 0s");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *janet_optcbytes(const Janet *argv, int32_t argc, int32_t n, const char *dflt) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user