On 9/19/06, Mikhail Markov (JIRA) <[EMAIL PROTECTED]> wrote:

   [
http://issues.apache.org/jira/browse/HARMONY-1462?page=comments#action_12435743]

Mikhail Markov commented on HARMONY-1462:
-----------------------------------------

I absolutely agree that '*' should be supported as a port number.
But API spec clearly says that: "portrange = portnumber | -portnumber |
portnumber-[portnumber]" (but still RI supports it!) - that's why i put it
to "Non-bug differences" category. Possible fix for API spec?


Great analysis! We must follow rule [1], but spec do not restrict
"portnumber" in rule [1].
And the problem is that we must choose one of following considerations:
1. We can take this JIRA as a "Non-bug differences" and consider
"portnumber" as ONLY numerical string ([0-9]*), it hints that RI breaks spec
because RI receive "*" as a "portnumber".
For this case, we certainly need not to give any fix for Harmony.
2. We can think that "portnumber" is not only numerical string, but also can
be "*". If so, because "*" indicates all ports(0-65535), so "-*" and "*-" is
meaningless in rule[1].

If we choose 1., we should take this JIRA as a RI's bug for it breaks the
But I think RI is innocent because the wildcard "*" is reasonable and really
a helpful feature.

If we choose 2., we should just notice that "-*" and "*-" is meaningless, as
an exception of rule [1], and rule[1] can be kept.
Then, we can improve Harmony safely with this helpful feature and keep the
spec.
In fact, following test cases will pass on RI, indicating that "-*" and "*-"
is meaningless and "*" is OK.
       try {
           new SocketPermission("localhost:-*", "listen");
           fail("-* should be considered as an illegal port range.");
       } catch (IllegalArgumentException e) {
           // Expected
       }
       try {
           new SocketPermission("localhost:*-", "listen");
           fail("*- should be considered as an illegal port range.");
       } catch (IllegalArgumentException e) {
           // Expected
       }
       SocketPermission sp3 = new SocketPermission("localhost:*",
"listen");

So, IMO, 2 is better.


[1]: portrange = portnumber | -portnumber | portnumber-[portnumber]




> [classlib][luni] SocketPermission does not accept '*' as a port number
> ----------------------------------------------------------------------
>
>                 Key: HARMONY-1462
>                 URL: http://issues.apache.org/jira/browse/HARMONY-1462
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>         Environment: Win XP
>            Reporter: Mikhail Markov
>         Assigned To: Paulex Yang
>         Attachments: patch.diff
>
>
> Although API specification does not explicitly allow '*' usage as a port
number for SocketPermission, RI accept '*' as a port number (representing
the full port range from 0 to 65535).
> ============== Test.java =================
> import java.net.SocketPermission;
> public class Test {
>     public static void main(String[] args) throws Exception {
>         try {
>             SocketPermission sp = new SocketPermission("localhost:*",
"listen");
>             System.out.println("'*' for port is ok.");
>         } catch (IllegalArgumentException iae) {
>             System.out.println("'*' for port is not ok: " + iae);
>         }
>     }
> }
> ======================================
> Output on RI:
> '*' for port is ok.
> Output on Harmony:
> '*' for port is not ok: java.lang.IllegalArgumentException: Invalid port
number specified

--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira





--
Robert Hu
China Software Development Lab, IBM

Reply via email to