You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2026/04/22 04:30:59 UTC

(couchdb) branch errstr-in-nouveau-instead-of-tosource created (now 2abd60f63)

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

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


      at 2abd60f63 Use errstr() instead of toSource() in nouveau js wrapper

This branch includes the following new commits:

     new 2abd60f63 Use errstr() instead of toSource() in nouveau js wrapper

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(couchdb) 01/01: Use errstr() instead of toSource() in nouveau js wrapper

Posted by va...@apache.org.
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 <va...@gmail.com>
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]