mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-13 05:33:51 -04:00
url-mode: fix double-width characters not being handled correctly
When a regex matches a string containing double-width characters, the CELL_SPACER values were included in the URL string. This meant the final URL (either launched, or copied) weren't handled correctly, as invalid UTF-8 sequences were inserted in the middle of the string. Closes #2027
This commit is contained in:
parent
bc2e0a29bb
commit
b93d2f042c
2 changed files with 9 additions and 2 deletions
|
|
@ -106,9 +106,12 @@
|
||||||
* Build failure (`srgb.h` not found) when doing a parallel build.
|
* Build failure (`srgb.h` not found) when doing a parallel build.
|
||||||
* Regression: reflowing (changing the window size) removing empty
|
* Regression: reflowing (changing the window size) removing empty
|
||||||
lines ([#2011][2011]).
|
lines ([#2011][2011]).
|
||||||
|
* `url/regex-copy` not handling double-width characters correctly
|
||||||
|
([#2027][2027]).
|
||||||
|
|
||||||
[2000]: https://codeberg.org/dnkl/foot/issues/2000
|
[2000]: https://codeberg.org/dnkl/foot/issues/2000
|
||||||
[2011]: https://codeberg.org/dnkl/foot/issues/2011
|
[2011]: https://codeberg.org/dnkl/foot/issues/2011
|
||||||
|
[2027]: https://codeberg.org/dnkl/foot/issues/2027
|
||||||
|
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|
|
||||||
|
|
@ -347,6 +347,9 @@ regex_detected(const struct terminal *term, enum url_action action,
|
||||||
wc_count = composed->count;
|
wc_count = composed->count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (wc[0] >= CELL_SPACER)
|
||||||
|
continue;
|
||||||
|
|
||||||
/* Convert wide character to utf8 */
|
/* Convert wide character to utf8 */
|
||||||
for (size_t i = 0; i < wc_count; i++) {
|
for (size_t i = 0; i < wc_count; i++) {
|
||||||
char buf[16];
|
char buf[16];
|
||||||
|
|
@ -355,6 +358,7 @@ regex_detected(const struct terminal *term, enum url_action action,
|
||||||
if (char_len == (size_t)-1)
|
if (char_len == (size_t)-1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
||||||
for (size_t j = 0; j < char_len; j++) {
|
for (size_t j = 0; j < char_len; j++) {
|
||||||
const size_t requires_size = vline->len + char_len;
|
const size_t requires_size = vline->len + char_len;
|
||||||
|
|
||||||
|
|
@ -411,9 +415,9 @@ regex_detected(const struct terminal *term, enum url_action action,
|
||||||
const size_t end = start + mlen;
|
const size_t end = start + mlen;
|
||||||
|
|
||||||
LOG_DBG(
|
LOG_DBG(
|
||||||
"regex match at row %d: %.*srow/col = %dx%d",
|
"regex match at row %d: %.*s (%zu bytes), row/col = %dx%d",
|
||||||
matches[1].rm_so, (int)mlen, &search_string[matches[1].rm_so],
|
matches[1].rm_so, (int)mlen, &search_string[matches[1].rm_so],
|
||||||
v->map[start].row, v->map[start].col);
|
mlen, v->map[start].row, v->map[start].col);
|
||||||
|
|
||||||
tll_push_back(
|
tll_push_back(
|
||||||
*urls,
|
*urls,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue