This is an automated email from the ASF dual-hosted git repository.

nickva pushed a commit to branch errstr-in-nouveau-instead-of-tosource
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 2abd60f639fd90182ef8d3ddad536e139ca4b7c9
Author: Nick Vatamaniuc <[email protected]>
AuthorDate: Wed Apr 22 00:26:39 2026 -0400

    Use errstr() instead of toSource() in nouveau js wrapper
    
    `toSource()` is a Spidermonkey special, use our `errstr()` warpper function 
which checks
    if `toSource()` is available, and if not,  it runs `toString()` instead
---
 share/server/nouveau.js                |  2 +-
 test/elixir/test/config/nouveau.elixir |  1 +
 test/elixir/test/nouveau_test.exs      | 24 ++++++++++++++++++++++++
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/share/server/nouveau.js b/share/server/nouveau.js
index 8c75d4a25..474e94c87 100644
--- a/share/server/nouveau.js
+++ b/share/server/nouveau.js
@@ -20,7 +20,7 @@ var Nouveau = (function () {
     } else if (err[0] == "fatal") {
       throw (err);
     }
-    var message = "function raised exception " + err.toSource();
+    var message = "function raised exception " + errstr(err);
     if (doc) message += " with doc._id " + doc._id;
     log(message);
   };
diff --git a/test/elixir/test/config/nouveau.elixir 
b/test/elixir/test/config/nouveau.elixir
index 304163f0a..0066ce372 100644
--- a/test/elixir/test/config/nouveau.elixir
+++ b/test/elixir/test/config/nouveau.elixir
@@ -31,6 +31,7 @@
     "purge with conflicts",
     "index same field with different field types",
     "index not found",
+    "index function throws",
     "meta",
     "stale search"
   ]
diff --git a/test/elixir/test/nouveau_test.exs 
b/test/elixir/test/nouveau_test.exs
index 888513fab..352270c22 100644
--- a/test/elixir/test/nouveau_test.exs
+++ b/test/elixir/test/nouveau_test.exs
@@ -704,6 +704,30 @@ defmodule NouveauTest do
     assert_status_code(resp, 404)
   end
 
+  @tag :with_db
+  test "index function throws", context do
+    db_name = context[:db_name]
+    create_search_docs(db_name)
+    ddoc =  %{
+      nouveau: %{
+        bar: %{
+          default_analyzer: "standard",
+          index: """
+            function (doc) {
+              throw(new Error("some error"));
+              index("string", "foo", doc.foo, {store: true});
+            }
+          """
+        }
+      }
+    }
+    create_ddoc(db_name, ddoc)
+    url = "/#{db_name}/_design/foo/_nouveau/bar"
+    resp = Couch.post(url, body: %{q: "foo:bar", include_docs: true})
+    assert_status_code(resp, 200)
+    assert resp.body["hits"] == []
+  end
+
   @tag :with_db
   test "meta", context do
     db_name = context[:db_name]

Reply via email to