It is probably fixable by storing the long as a transient field and overriding writeObject and computing the String as needed in other methods, but I am somewhat skeptical if it is worth it as it would make the implementation a bit more complex.

--Sean

On 4/19/24 4:38 AM, Mkrtchyan, Tigran wrote:

Dear JDK Security-devs,

Recently, during profiling, I noticed that UnixNumericUserPrincipal has
useless conversion between long and string:

```
     private String name;

     public UnixNumericUserPrincipal(long name) {
         this.name = Long.toString(name);
     }

     /**
      * Return the user identification number (UID) for this
      * {@code UnixNumericUserPrincipal} as a long.
      *
      * @return the user identification number (UID) for this
      *          {@code UnixNumericUserPrincipal} as a long.
      */
     public long longValue() {
         return Long.parseLong(name);
     }

```

My naive assumption is, that if one uses UnixNumericXxxPrincipal,
then with a high probability, `longValue` will be called, thus
converting long to a string and back is not that efficient (which
is visible in the profiler). The same is true for
UnixNumericGroupPrincipal too.

Unfortunately, the presence of `readObject`method makes modifications
to the class not trivial.

Best regards,
    Tigran.

Reply via email to