Change some errdetail() to errdetail_internal()
authorAlvaro Herrera <[email protected]>
Wed, 28 Sep 2022 15:14:53 +0000 (17:14 +0200)
committerAlvaro Herrera <[email protected]>
Wed, 28 Sep 2022 15:14:53 +0000 (17:14 +0200)
This prevents marking the argument string for translation for gettext,
and it also prevents the given string (which is already translated) from
being translated at runtime.

Also, mark the strings used as arguments to check_rolespec_name for
translation.

Backpatch all the way back as appropriate.  None of this is caught by
any tests (necessarily so), so I verified it manually.

src/backend/catalog/dependency.c
src/backend/commands/publicationcmds.c
src/backend/commands/user.c
src/backend/utils/adt/acl.c
src/backend/utils/adt/jsonfuncs.c
src/common/jsonapi.c

index 39768fa22be15d93205a2be4c1a002c2a3d1c784..7f3e64b5ae610cd1fddb2c81a4c5ca311b9f36de 100644 (file)
@@ -1192,14 +1192,14 @@ reportDependentObjects(const ObjectAddresses *targetObjects,
                    (errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST),
                     errmsg("cannot drop %s because other objects depend on it",
                            getObjectDescription(origObject, false)),
-                    errdetail("%s", clientdetail.data),
+                    errdetail_internal("%s", clientdetail.data),
                     errdetail_log("%s", logdetail.data),
                     errhint("Use DROP ... CASCADE to drop the dependent objects too.")));
        else
            ereport(ERROR,
                    (errcode(ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST),
                     errmsg("cannot drop desired object(s) because other objects depend on them"),
-                    errdetail("%s", clientdetail.data),
+                    errdetail_internal("%s", clientdetail.data),
                     errdetail_log("%s", logdetail.data),
                     errhint("Use DROP ... CASCADE to drop the dependent objects too.")));
    }
@@ -1210,7 +1210,7 @@ reportDependentObjects(const ObjectAddresses *targetObjects,
                               "drop cascades to %d other objects",
                               numReportedClient + numNotReportedClient,
                               numReportedClient + numNotReportedClient),
-                errdetail("%s", clientdetail.data),
+                errdetail_internal("%s", clientdetail.data),
                 errdetail_log("%s", logdetail.data)));
    }
    else if (numReportedClient == 1)
index 59e032adc41bf34f292bc697f508295188792e13..8514ebfe911effa0e24c64fcd8af3b964408390d 100644 (file)
@@ -580,7 +580,7 @@ check_simple_rowfilter_expr_walker(Node *node, ParseState *pstate)
        ereport(ERROR,
                (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                 errmsg("invalid publication WHERE expression"),
-                errdetail("%s", errdetail_msg),
+                errdetail_internal("%s", errdetail_msg),
                 parser_errposition(pstate, exprLocation(node))));
 
    return expression_tree_walker(node, check_simple_rowfilter_expr_walker,
index 265a48af7eb9dd4e87a7cb7a2b0e64a6b21e8ec3..04a18d4a425ae8dfe44ae60779ed1ad33a9cdce4 100644 (file)
@@ -576,7 +576,7 @@ AlterRole(ParseState *pstate, AlterRoleStmt *stmt)
    GrantRoleOptions    popt;
 
    check_rolespec_name(stmt->role,
-                       "Cannot alter reserved roles.");
+                       _("Cannot alter reserved roles."));
 
    /* Extract options from the statement node tree */
    foreach(option, stmt->options)
@@ -910,7 +910,7 @@ AlterRoleSet(AlterRoleSetStmt *stmt)
    if (stmt->role)
    {
        check_rolespec_name(stmt->role,
-                           "Cannot alter reserved roles.");
+                           _("Cannot alter reserved roles."));
 
        roletuple = get_rolespec_tuple(stmt->role);
        roleform = (Form_pg_authid) GETSTRUCT(roletuple);
index fd71a9b13e90a4b85a46bed59894cea9e35e0213..4fac402e5b6486ed0c04850dbbaebe1b9c3e5537 100644 (file)
@@ -5291,7 +5291,7 @@ get_rolespec_name(const RoleSpec *role)
 
 /*
  * Given a RoleSpec, throw an error if the name is reserved, using detail_msg,
- * if provided.
+ * if provided (which must be already translated).
  *
  * If node is NULL, no error is thrown.  If detail_msg is NULL then no detail
  * message is provided.
@@ -5312,7 +5312,7 @@ check_rolespec_name(const RoleSpec *role, const char *detail_msg)
                    (errcode(ERRCODE_RESERVED_NAME),
                     errmsg("role name \"%s\" is reserved",
                            role->rolename),
-                    errdetail("%s", detail_msg)));
+                    errdetail_internal("%s", detail_msg)));
        else
            ereport(ERROR,
                    (errcode(ERRCODE_RESERVED_NAME),
index 82c43617d85b38cea4c1db69b08a66037f4b2754..fd0d355789c44ee5edc8969a32a32af51278c4bf 100644 (file)
@@ -615,13 +615,13 @@ json_ereport_error(JsonParseErrorType error, JsonLexContext *lex)
        ereport(ERROR,
                (errcode(ERRCODE_UNTRANSLATABLE_CHARACTER),
                 errmsg("unsupported Unicode escape sequence"),
-                errdetail("%s", json_errdetail(error, lex)),
+                errdetail_internal("%s", json_errdetail(error, lex)),
                 report_json_context(lex)));
    else
        ereport(ERROR,
                (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
                 errmsg("invalid input syntax for type %s", "json"),
-                errdetail("%s", json_errdetail(error, lex)),
+                errdetail_internal("%s", json_errdetail(error, lex)),
                 report_json_context(lex)));
 }
 
index cfc025749cc4280cec0c4bb35b7fcd4539747ea8..873357aa02e7bce64b6db64605a6645cbb310173 100644 (file)
@@ -1079,11 +1079,11 @@ extract_token(JsonLexContext *lex)
 }
 
 /*
- * Construct a detail message for a JSON error.
+ * Construct an (already translated) detail message for a JSON error.
  *
  * Note that the error message generated by this routine may not be
  * palloc'd, making it unsafe for frontend code as there is no way to
- * know if this can be safery pfree'd or not.
+ * know if this can be safely pfree'd or not.
  */
 char *
 json_errdetail(JsonParseErrorType error, JsonLexContext *lex)