antlafarge opened a new pull request, #3372:
URL: https://github.com/apache/thrift/pull/3372

   <!-- Explain the changes in the pull request below: -->
    There is a bug in the JavaScript custom exception constructor 
implementation.
   This thrift custom exception :
   ```
   exception CustomError {
     1: required ErrorCode code;
   }
   ```
   results to a constructor which takes a single JS Object with custom 
properties :
   ```
   const CustomError = module.exports.CustomError = class extends 
Thrift.TException {
     constructor(args) {
       super(args);
       this.name = "CustomError";
       this.code = null;
       // ...
   ```
   We can check it in the associated TypeScript typings :
   ```
   declare class ZaapError extends Thrift.TException {
       public code: ErrorCode;
   
         constructor(args?: { code: ErrorCode; });
     }
   ```
   The generated code gives the JS object to the constructor of 
Thrift.TException.
   But the Thrift.TException construction takes a single string argument :
   ```
   exports.TException = TException;
   
   function TException(message) {
     Error.call(this);
     Error.captureStackTrace(this, this.constructor);
     this.name = this.constructor.name;
     this.message = message;
   };
   util.inherits(TException, Error);
   ```
   Giving this custom object to the TException (instead of a string) throws 
unwanted Thrift exceptions in `TBinaryProtocol.prototype.writeStringOrBinary` :
   ```
   Exception has occurred: Error: writeString called without a string/Buffer 
argument: [object Object]
   ```
   <img width="1173" height="532" alt="Thrift-bug" 
src="https://github.com/user-attachments/assets/fe37051f-8947-4a95-969b-d88c40e36f4d";
 />
   
   The fix is to give the name of the custom exception to the constructor of 
the inherited Thrift exception class (TException).
   
   <!-- We recommend you review the checklist/tips before submitting a pull 
request. -->
   
   - [ ] Did you create an [Apache 
Jira](https://issues.apache.org/jira/projects/THRIFT/issues/) ticket?  
([Request account here](https://selfserve.apache.org/jira-account.html), not 
required for trivial changes)
   - [ ] If a ticket exists: Does your pull request title follow the pattern 
"THRIFT-NNNN: describe my issue"?
   - [ ] Did you squash your changes to a single commit?  (not required, but 
preferred)
   - [ ] Did you do your best to avoid breaking changes?  If one was needed, 
did you label the Jira ticket with "Breaking-Change"?
   - [ ] If your change does not involve any code, include `[skip ci]` anywhere 
in the commit message to free up build resources.
   
   <!--
     The Contributing Guide at:
     https://github.com/apache/thrift/blob/master/CONTRIBUTING.md
     has more details and tips for committing properly.
   -->
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to