aglinxinyuan opened a new issue, #8149:
URL: https://github.com/apache/texera/issues/8149

   ### What happened?
   
   `Attribute.equals` has two null guards that are unreachable, and the second 
one is wrong if it ever *were* reached.
   
   ```java
   Attribute that = (Attribute) toCompare;
   
   if (this.attributeName == null) {
       return that.attributeName == null;
   }
   if (this.attributeType == null) {
       return that.attributeType == null;      // ignores the names entirely
   }
   
   return this.attributeName.equalsIgnoreCase(that.attributeName)
       && this.attributeType.equals(that.attributeType);
   ```
   
   **They cannot be reached.** The only constructor `checkNotNull`s both fields:
   
   ```java
   public Attribute(String attributeName, AttributeType attributeType) {
       checkNotNull(attributeName);
       checkNotNull(attributeType);
       ...
   }
   ```
   
   **The second guard is also a latent bug.** If `attributeType` were ever null 
— say a future constructor, a deserialization path, or reflection — then 
`equals` returns `that.attributeType == null` **without comparing the names at 
all**. Two attributes with different names and null types would compare equal, 
which breaks the `Schema` lookups and `Set` semantics built on this class.
   
   The safe fix is to delete both guards, since the constructor already 
guarantees non-null. If the guards are meant to survive, the second must still 
compare names.
   
   Found while assessing test coverage; these lines are among the file's 
uncovered residue. **Deliberately not pinned by a test** — a test would have to 
construct an instance the constructor forbids, and pinning the current second 
guard would cement the name-ignoring comparison.
   
   Note the file is a `.java` file living under `src/main/scala/`, which is 
easy to miss when searching.
   
   ### How to reproduce?
   
   Static:
   
   1. 
`common/workflow-core/src/main/scala/org/apache/texera/amber/core/tuple/Attribute.java`
 — the constructor's two `checkNotNull` calls, then the two null guards in 
`equals`.
   2. Coverage on `main` shows those guard lines and their bodies as never 
executed.
   
   ### Version/Branch
   
   1.3.0-incubating-SNAPSHOT (main)
   
   ### Was this issue authored using generative AI tooling?
   
   Generated-by: Claude Code (Opus 5)
   


-- 
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