]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix inverted NOCOPY encode/decode parameter (bug#40407)
authorMattias Engdegård <mattiase@acm.org>
Sun, 5 Apr 2020 09:27:36 +0000 (11:27 +0200)
committerMattias Engdegård <mattiase@acm.org>
Sun, 5 Apr 2020 09:39:52 +0000 (11:39 +0200)
In {encode,decode}-coding-string, the NOCOPY parameter had the
opposite effect to what was intended and documented.  This 18 year old
bug (introduced in 4031e2bf0a) only affected calls with CODING-SYSTEM
being nil.

* src/coding.c (code_convert_string): Correct use of NOCOPY.
* test/src/coding-tests.el (coding-nocopy-trivial): New test.

src/coding.c
test/src/coding-tests.el

index f0fc37dbdfa1feee05030ccbbe3353307af325cf..1049f1b755afa81d2320aa865f666d9d8e183c61 100644 (file)
@@ -9485,7 +9485,7 @@ code_convert_string (Lisp_Object string, Lisp_Object coding_system,
       if (! norecord)
        Vlast_coding_system_used = Qno_conversion;
       if (NILP (dst_object))
-       return (nocopy ? Fcopy_sequence (string) : string);
+       return nocopy ? string : Fcopy_sequence (string);
     }
 
   if (NILP (coding_system))
index 094a1fad8fa07595578f3b1d01153933b676b69a..110ff1269645bcb83e8bebcd4831006cea8c2438 100644 (file)
                         (with-temp-buffer (insert-file-contents (car file))))))
          (insert (format "%s: %s\n" (car file) result)))))))
 
+(ert-deftest coding-nocopy-trivial ()
+  "Check that the NOCOPY parameter works for the trivial coding system."
+  (let ((s "abc"))
+    (should-not (eq (decode-coding-string s nil nil) s))
+    (should (eq (decode-coding-string s nil t) s))
+    (should-not (eq (encode-coding-string s nil nil) s))
+    (should (eq (encode-coding-string s nil t) s))))
+
 ;; Local Variables:
 ;; byte-compile-warnings: (not obsolete)
 ;; End: