| 23 | } adapter_sb_t; |
| 24 | |
| 25 | static void sb_append(adapter_sb_t *sb, const char *s) { |
| 26 | if (sb->failed || !s) { |
| 27 | return; |
| 28 | } |
| 29 | size_t add = strlen(s); |
| 30 | if (sb->len + add + 1 > sb->cap) { |
| 31 | size_t want = sb->cap ? sb->cap : CBM_SZ_2K; |
| 32 | while (want < sb->len + add + 1) { |
| 33 | if (want > SIZE_MAX / PAIR_LEN) { |
| 34 | sb->failed = true; |
| 35 | return; |
| 36 | } |
| 37 | want *= PAIR_LEN; |
| 38 | } |
| 39 | char *grown = realloc(sb->buf, want); |
| 40 | if (!grown) { |
| 41 | sb->failed = true; |
| 42 | return; |
| 43 | } |
| 44 | sb->buf = grown; |
| 45 | sb->cap = want; |
| 46 | } |
| 47 | memcpy(sb->buf + sb->len, s, add); |
| 48 | sb->len += add; |
| 49 | sb->buf[sb->len] = '\0'; |
| 50 | } |
| 51 | |
| 52 | bool cbm_client_adapter_escape_js(const char *in, char *out, size_t out_sz) { |
| 53 | if (!in || !out || out_sz == 0) { |
no outgoing calls
no test coverage detected