From 8827682b35f6fefb4604f28447b77e8443cbf1cb Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Fri, 30 May 2014 03:11:44 +0300
Subject: [PATCH] objstr: *strip(): If nothing is stripped, don't create dup
 string.

---
 py/objstr.c                  | 6 ++++++
 tests/basics/string_strip.py | 4 ++++
 2 files changed, 10 insertions(+)

diff --git a/py/objstr.c b/py/objstr.c
index 42a246429..d095c8b47 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -691,6 +691,12 @@ STATIC mp_obj_t str_uni_strip(int type, uint n_args, const mp_obj_t *args) {
     assert(last_good_char_pos >= first_good_char_pos);
     //+1 to accomodate the last character
     machine_uint_t stripped_len = last_good_char_pos - first_good_char_pos + 1;
+    if (stripped_len == orig_str_len) {
+        // If nothing was stripped, don't bother to dup original string
+        // TODO: watch out for this case when we'll get to bytearray.strip()
+        assert(first_good_char_pos == 0);
+        return args[0];
+    }
     return mp_obj_new_str_of_type(self_type, orig_str + first_good_char_pos, stripped_len);
 }
 
diff --git a/tests/basics/string_strip.py b/tests/basics/string_strip.py
index 70c74b383..5d99a78e5 100644
--- a/tests/basics/string_strip.py
+++ b/tests/basics/string_strip.py
@@ -31,3 +31,7 @@ print(" a".rstrip())
 print("a ".strip())
 print("a ".lstrip())
 print("a ".rstrip())
+
+# Test that stripping unstrippable string returns original object
+s = "abc"
+print(id(s.strip()) == id(s))
-- 
GitLab