objstr: *strip(): Fix handling of one-char subject strings.
diff --git a/py/objstr.c b/py/objstr.c
index 83fd002..42a2464 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -667,6 +667,7 @@
for (machine_uint_t len = orig_str_len; len > 0; len--) {
if (find_subbytes(chars_to_del, chars_to_del_len, &orig_str[i], 1, 1) == NULL) {
if (!first_good_char_pos_set) {
+ first_good_char_pos_set = true;
first_good_char_pos = i;
if (type == LSTRIP) {
last_good_char_pos = orig_str_len - 1;
@@ -676,14 +677,13 @@
last_good_char_pos = i;
break;
}
- first_good_char_pos_set = true;
}
last_good_char_pos = i;
}
i += delta;
}
- if (first_good_char_pos == 0 && last_good_char_pos == 0) {
+ if (!first_good_char_pos_set) {
// string is all whitespace, return ''
return MP_OBJ_NEW_QSTR(MP_QSTR_);
}
diff --git a/tests/basics/string_strip.py b/tests/basics/string_strip.py
index 4684c2a..70c74b3 100644
--- a/tests/basics/string_strip.py
+++ b/tests/basics/string_strip.py
@@ -20,3 +20,14 @@
print('mississippi'.rstrip(b'ipz'))
except TypeError:
print("TypeError")
+
+# single-char subj string used to give a problem
+print("a".strip())
+print("a".lstrip())
+print("a".rstrip())
+print(" a".strip())
+print(" a".lstrip())
+print(" a".rstrip())
+print("a ".strip())
+print("a ".lstrip())
+print("a ".rstrip())