RFR: JDK-8227021: VM fails if any sun.boot.library.path paths are longer than JVM_MAXPATHLEN
David Holmes
david.holmes at oracle.com
Wed Aug 21 07:23:35 UTC 2019
Hi Adam,
Updates look good. One further style nit I missed: In all // comments in
the test e.g.
//Grab any path.
please add a space after //
No need for updated webrev.
Thanks,
David
On 20/08/2019 11:13 pm, Adam Farley8 wrote:
> Hi David,
>
> Good advice. Changes made as requested.
>
> Webrev: http://cr.openjdk.java.net/~afarley/8227021.6/webrev/
>
> Does anyone have further concerns or changes to propose?
>
> Best Regards
>
> Adam Farley
> IBM Runtimes
>
>
> David Holmes <david.holmes at oracle.com> wrote on 20/08/2019 12:55:26:
>
>> From: David Holmes <david.holmes at oracle.com>
>> To: Adam Farley8 <adam.farley at uk.ibm.com>, coleen.phillimore at oracle.com
>> Cc: hotspot-dev at openjdk.java.net
>> Date: 20/08/2019 12:55
>> Subject: Re: RFR: JDK-8227021: VM fails if any sun.boot.library.path
>> paths are longer than JVM_MAXPATHLEN
>>
>> Hi Adam,
>>
>> On 20/08/2019 1:21 am, Adam Farley8 wrote:
>> > Hi Coleen, David,
>> >
>> > Here's the new webrev: https://urldefense.proofpoint.com/v2/url?
>> u=http-3A__cr.openjdk.java.net_-7Eafarley_8227021.5_webrev_&d=DwID-
>> g&c=jf_iaSHvJObTbx-siA1ZOg&r=P5m8KWUXJf-
>> CeVJc0hDGD9AQ2LkcXDC0PMV9ntVw5Ho&m=zaU5bibnUdHVncMttyVGbYf1yzDRUt26f9raqqKlJm0&s=QPe5l0tueNKISo62mJJ2RdRLUg_LsrhapCgVNJ0W3yQ&e=
>>
>> In this comment:
>>
>> ! * in use, you can pass the length of that in n, to ensure
>> ! * we detect if any path exceeds the maximum path length
>> ! * once prepended onto the sub-path/file name.
>> * It is the callers responsibility to:
>> * a> check the value of n, and n may be 0.
>>
>> the three references to 'n' should be to the new file_name_length parameter.
>>
>> Looking at the test:
>>
>> 2 * Copyright (c) 2019, 2019, Oracle and/or its affiliates. All
>> rights reserved.
>>
>> For a new file there is only a single year specified so this should be:
>>
>> 2 * Copyright (c) 2019, Oracle and/or its affiliates. All rights
>> reserved.
>>
>> 31 * @run main TestSunBootLibraryPath
>>
>> As this just launches another VM it is more efficient to use "@run driver".
>>
>> 35 import java.lang.IllegalArgumentException;
>>
>> Nit: java.lang.* is implicitly imported.
>>
>> 39 static String expectedErrorMessage =("The VM tried to use a
>> path that exceeds the maximum path length for "
>> 40 + "this system. Review
>> path-containing parameters and properties, such as "
>> 41 + "sun.boot.library.path, to
>> identify potential sources for this path.");
>>
>> Nit: no need for parentheses.
>>
>> Probably also no need to check for the entire message - the first line
>> should suffice.
>>
>> 48 //Add enough characters to make it "too long".
>> 49 for (int i = 0 ; i < tooLongPathSize ; i++) tooLongPath
>> += "a";
>>
>> This can be done more efficiently and succinctly as:
>>
>> tooLongPath += "a".repeat(5000);
>>
>> There's probably an even better way. :)
>>
>> 60 throw new java.lang.IllegalArgumentException("Test was
>> launched with an invalid argument.");
>>
>> No need to specify "java.lang".
>>
>> Thanks,
>> David
>> -----
>>
>> > I made the requested changes, and moved the null check as suggested.
>> >
>> > (I agree passing a null for any of these values would be odd, and
>> > unlikely to be done on purpose.)
>> >
>> > It also includes a new jtreg test for this change, which uses ProcessTools.
>> >
>> > Let me know what you think (inc Serguei + others).
>> >
>> > Best Regards
>> >
>> > Adam Farley
>> > IBM Runtimes
>> >
>> >
>> > coleen.phillimore at oracle.com wrote on 16/08/2019 23:59:53:
>> >
>> >> From: coleen.phillimore at oracle.com
>> >> To: Adam Farley8 <adam.farley at uk.ibm.com>
>> >> Cc: David Holmes <david.holmes at oracle.com>, hotspot-dev at openjdk.java.net
>> >> Date: 17/08/2019 00:00
>> >> Subject: Re: RFR: JDK-8227021: VM fails if any sun.boot.library.path
>> >> paths are longer than JVM_MAXPATHLEN
>> >>
>> >>
>> >
>> >> On 8/16/19 7:35 AM, Adam Farley8 wrote:
>> >> Hi Coleen,
>> >>
>> >> To confirm your suspicions, I didn't see your responses. No
>> offence intended.
>> >>
>> >> I send a lot of mail so I'm sure I can be caught in people's spamfilter. :)
>> >>
>> >>
>> >> Responses below.
>> >>
>> >> Best Regards
>> >>
>> >> Adam Farley
>> >> IBM Runtimes
>> >>
>> >>
>> >> coleen.phillimore at oracle.com wrote on 15/08/2019 13:42:51:
>> >>
>> >> > From: coleen.phillimore at oracle.com
>> >> > To: hotspot-dev at openjdk.java.net, Adam Farley8
>> >> > <adam.farley at uk.ibm.com>, David Holmes <david.holmes at oracle.com>
>> >> > Date: 15/08/2019 13:43
>> >> > Subject: Re: RFR: JDK-8227021: VM fails if any sun.boot.library.path
>> >> > paths are longer than JVM_MAXPATHLEN
>> >> >
>> >> > Hi Adam, David noticed that my code review replies only went to the
>> >> > mailing list. So here it is again.
>> >> > Thanks,
>> >> > Coleen
>> >> >
>> >> > On 8/13/19 5:29 PM, coleen.phillimore at oracle.com wrote:
>> >> > >
>> >> > >
>> >> > > On 8/13/19 11:48 AM, Adam Farley8 wrote:
>> >> > >> Hi David,
>> >> > >>
>> >> > >> Since we have two positive reviews (yours and Serguei's), could you
>> >> > >> sponsor the change please?
>> >> > >
>> >> > > If you get two positive reviews, but then one with comments, you need
>> >> > > to also answer that third reviews. I had some comments on your
>> >> > > change, which I'll repeat here:
>> >> > >
>> >> > >
>> >> > > https://urldefense.proofpoint.com/v2/url?
>> >> > u=http-3A__cr.openjdk.java.net_-7Eafarley_8227021.
>> >> >
>> >>
>> 2_webrev_src_hotspot_share_runtime_os.cpp.frames.html&d=DwIDaQ&c=jf_iaSHvJObTbx-
>> >> > siA1ZOg&r=P5m8KWUXJf-
>> >> > CeVJc0hDGD9AQ2LkcXDC0PMV9ntVw5Ho&m=wjd3KxxgFQv49yjlb4Bndy-
>> >> > F1XV4pbuPZrmemiaFthA&s=xXwflqvuzoEhcREhr-x7rNMVDeroZ8Xh1LnW6NytumE&e=
>> >> > >
>> >> > >
>> >> > > This is code is unnecessarily hard to read and understand:
>> >> > >
>> >> > > 1329 char** os::split_path(const char* path, size_t* n) {
>> >> > > 1330 size_t pathmod = (size_t)0;
>> >> > > 1331 if (n != NULL) {
>> >> > > 1332 pathmod = *n;
>> >> > > 1333 }
>> >> > > 1334 *n = (size_t)0;
>> >> > >
>> >> > > It appears that 'n' is both an input and output parameter of this
>> >> > > function. Can you just make it another input parameter with some
>> >> > > descriptive name. Is it the length of the library name that you're
>> >> > > looking for? "pathmod" is huh?
>> >>
>> >> The 'n' is both an input and an output, yes.
>> >>
>> >> I could make it another input parameter, but that means modifying the
>> >> method signature. This seemed unnecessary, given that we have an input
>> >> vector we're not using for anything.
>> >>
>> >> It's not a big deal to add a parameter, especially since there's
>> >> only one call site, and the names don't have to be squished up C names.
>> >>
>> >> How about: char** split_path(char* path, size_t file_length,
>> >> size_t* elements) ?
>> >
>> >>
>> >>
>> >> The 'n' input is used as a modifier for the length of the path, as
>> >> mentioned in the comment. I called it "pathmod" because it's a PATH
>> >> length MODIFIER. I couldn't think of a better name that's also concise.
>> >> Would pathlenmod be better? Pathsizemod sounds like we're making the path
>> >> physically bigger, or maybe that's just me. :)
>> >>
>> >> > >
>> >> > > Then you don't have to check if someone has passed NULL. There's only
>> >> > > one caller to this from what I see.
>> >>
>> >> I'm not sure I understand this. We'd still need to check for null, even if
>> >> the pathmod has its own input parameter. I believe adding a NULL to an int
>> >> causes a segmentation error at runtime.
>> >>
>> >> If you're saying the null check isn't needed because we can
>> ensure anon-null
>> >> is passed in via the only place we call split_path, I disagree
>> that this is a
>> >> future-proof assumption. A null check seems prudent here.
>> >>
>> >> I think the function doesn't make any sense if you pass an output
>> >> parameter as NULL. Or at worst you could add it to the line:
>> >>
>> >> 1335 if (path == NULL || strlen(path) == 0 || n == NULL) {
>> >> 1336 return NULL;
>> >> 1337 }
>> >> 1334 *n = (size_t)0;
>> >>
>> >> But that's just weird. Why would a caller pass a non-null path and
>> >> not want the element count?
>> >>
>> >> Thanks,
>> >> Coleen
>> >>
>> >>
>> >> > >
>> >> > > 1352 char** opath = (char**) NEW_C_HEAP_ARRAY(char*, count,
>> >> > > mtInternal);
>> >> > > 1353 if (opath == NULL) {
>> >> > > 1354 return NULL;
>> >> > > 1355 }
>> >> > >
>> >> > >
>> >> > > Not your change but this calls vm_exit_out_of_memory() if
>> >> > > NEW_C_HEAP_ARRAY fails. It doesn't return NULL so you don't have to
>> >> > > check.
>> >>
>> >> Seems legit. I'll include this in the .5 version once we have consensus on
>> >> the other changes. Good spot.
>> >>
>> >> > >
>> >> > > 1375 char* s = (char*)NEW_C_HEAP_ARRAY(char, len + 1,
>> mtInternal);
>> >> > >
>> >> > > Here you want to use NEW_C_HEAP_ARRAY_RETURN_NULL so you cancheck for
>> >> > > null and free memory.
>> >>
>> >> Good idea. Noted for .5.
>> >>
>> >> Let me know your thoughts on the other points above.
>> >>
>> >>
>> >> > >
>> >> > >
>> >> > > The rest seems okay.
>> >> > >
>> >> > > thanks,
>> >> > > Coleen
>> >> > >
>> >> > >>
>> >> > >> Best Regards
>> >> > >>
>> >> > >> Adam Farley
>> >> > >> IBM Runtimes
>> >> > >>
>> >> > >>
>> >> > >> David Holmes <david.holmes at oracle.com> wrote on 12/08/2019 23:32:14:
>> >> > >>
>> >> > >>> From: David Holmes <david.holmes at oracle.com>
>> >> > >>> To: Adam Farley8 <adam.farley at uk.ibm.com>
>> >> > >>> Cc: hotspot-dev at openjdk.java.net, "serguei.spitsyn at oracle.com"
>> >> > >>> <serguei.spitsyn at oracle.com>
>> >> > >>> Date: 12/08/2019 23:32
>> >> > >>> Subject: Re: RFR: JDK-8227021: VM fails if any sun.boot.library.path
>> >> > >>> paths are longer than JVM_MAXPATHLEN
>> >> > >>>
>> >> > >>> Looks fine.
>> >> > >>>
>> >> > >>> Thanks,
>> >> > >>> David
>> >> > >>>
>> >> > >>> On 13/08/2019 1:19 am, Adam Farley8 wrote:
>> >> > >>>> Hi David,
>> >> > >>>>
>> >> > >>>> Changes made as requested:
>> >> > >>>> https://urldefense.proofpoint.com/v2/url?
>> >> > >>> u=http-3A__cr.openjdk.java.net_-7Eafarley_8227021.4_webrev&d=DwID-
>> >> > >>> g&c=jf_iaSHvJObTbx-siA1ZOg&r=P5m8KWUXJf-
>> >> > >>>
>> >> > >>
>> >> >
>> >>
>> CeVJc0hDGD9AQ2LkcXDC0PMV9ntVw5Ho&m=mZM8IR4e_zmrfcsF3XJjoGEMrZb4WtEL7Y6Ugd6Naqg&s=sZ2UKqqUIq0El-
>> >> > >>
>> >> > >>> RsqYz6jmTh4Q2UghwdrQX6of8Lw0E&e=
>> >> > >>>> Best Regards
>> >> > >>>>
>> >> > >>>> Adam Farley
>> >> > >>>> IBM Runtimes
>> >> > >>>>
>> >> > >>>>
>> >> > >>>> David Holmes <david.holmes at oracle.com> wrote on 12/08/
>> 2019 04:55:36:
>> >> > >>>>
>> >> > >>>>> From: David Holmes <david.holmes at oracle.com>
>> >> > >>>>> To: Adam Farley8 <adam.farley at uk.ibm.com>,
>> >> > >>>>> "serguei.spitsyn at oracle.com" <serguei.spitsyn at oracle.com>
>> >> > >>>>> Cc: hotspot-dev at openjdk.java.net
>> >> > >>>>> Date: 12/08/2019 04:56
>> >> > >>>>> Subject: Re: RFR: JDK-8227021: VM fails if any
>> sun.boot.library.path
>> >> > >>>>> paths are longer than JVM_MAXPATHLEN
>> >> > >>>>>
>> >> > >>>>> Hi Adam,
>> >> > >>>>>
>> >> > >>>>> On 10/08/2019 2:47 am, Adam Farley8 wrote:
>> >> > >>>>>> Hi Serguei, David,
>> >> > >>>>>>
>> >> > >>>>>> My turn to apologise for the delay. :)
>> >> > >>>>>>
>> >> > >>>>>> I've modified the code as per Serguei's request. Take alook and
>> >> > >> let me
>> >> > >>>>>> know if this is the sort of thing you were thinking of.
>> >> > >>>>>>
>> >> > >>>>>> Webrev: https://urldefense.proofpoint.com/v2/url?
>> >> > >>>>> u=http-3A__cr.openjdk.java.net_-7Eafarley_8227021.3_webrev_&d=DwID-
>> >> > >>>>> g&c=jf_iaSHvJObTbx-siA1ZOg&r=P5m8KWUXJf-
>> >> > >>>>> CeVJc0hDGD9AQ2LkcXDC0PMV9ntVw5Ho&m=8Wa8Zdfmvn-
>> >> > >>>>>
>> >> > >>
>> >> >
>> >>
>> yvzvCAhOyJ_etFblRA4vmLGbKF4aW8PY&s=L19aeFXoR9JIO62QRPFzZObIU8RbhpCtXSvUibD2ISk&e=
>> >> > >>
>> >> > >>>>> I'd prefer to see the helper just as a file static function rather
>> >> > >> than
>> >> > >>>>> adding it to the os class.
>> >> > >>>>>
>> >> > >>>>> + * supplied array of arrays of chars (a), where n
>> >> > >>>>>
>> >> > >>>>> I assume (a) is meant to refer to the parameter, but you actually
>> >> > >> called
>> >> > >>>>> it arrayarray. I think "a" or "arr" would suffice.
>> >> > >>>>>
>> >> > >>>>> Thanks,
>> >> > >>>>> David
>> >> > >>>>>
>> >> > >>>>>> Best Regards
>> >> > >>>>>>
>> >> > >>>>>> Adam Farley
>> >> > >>>>>> IBM Runtimes
>> >> > >>>>>>
>> >> > >>>>>>
>> >> > >>>>>> "serguei.spitsyn at oracle.com"
>> <serguei.spitsyn at oracle.com> wrote on
>> >> > >>>>>> 31/07/2019 17:18:05:
>> >> > >>>>>>
>> >> > >>>>>>> From: "serguei.spitsyn at oracle.com" <serguei.spitsyn at oracle.com>
>> >> > >>>>>>> To: Adam Farley8 <adam.farley at uk.ibm.com>, David Holmes
>> >> > >>>>>>> <david.holmes at oracle.com>
>> >> > >>>>>>> Cc: serviceability-dev <serviceability-dev at openjdk.java.net>,
>> >> > >>>>>>> hotspot-dev at openjdk.java.net
>> >> > >>>>>>> Date: 31/07/2019 17:18
>> >> > >>>>>>> Subject: Re: RFR: JDK-8227021: VM fails if any
>> >> > >> sun.boot.library.path
>> >> > >>>>>>> paths are longer than JVM_MAXPATHLEN
>> >> > >>>>>>>
>> >> > >>>>>>> Hi Adam,
>> >> > >>>>>>>
>> >> > >>>>>>> It looks Okay to me.
>> >> > >>>>>>>
>> >> > >>>>>>> A couple of minor comments.
>> >> > >>>>>>>
>> >> > >>>>>>> https://urldefense.proofpoint.com/v2/url?
>> >> > >>>>> u=http-3A__cr.openjdk.java.net_-7Eafarley_8227021.
>> >> > >>>>> 2_webrev_src_hotspot_&d=DwID-g&c=jf_iaSHvJObTbx-
>> >> > >>>>> siA1ZOg&r=P5m8KWUXJf-CeVJc0hDGD9AQ2LkcXDC0PMV9ntVw5Ho&m=8Wa8Zdfmvn-
>> >> > >>>>>
>> >> > >>
>> >> >
>> >>
>> yvzvCAhOyJ_etFblRA4vmLGbKF4aW8PY&s=NL6tYuwwDod3DSmj-1ztxAywpO8L52HEyO0wvTR05bs&e=
>> >> > >>
>> >> > >>>>>>> share/runtime/os.cpp.frames.html
>> >> > >>>>>>> 1362 //release allocated storage before exiting the vm
>> >> > >>>>>>> 1363 while (i > 0) {
>> >> > >>>>>>> 1364 i--;
>> >> > >>>>>>> 1365 if (opath[i] != NULL) {
>> >> > >>>>>>> 1366 FREE_C_HEAP_ARRAY(char, opath[i]);
>> >> > >>>>>>> 1367 }
>> >> > >>>>>>> 1368 }
>> >> > >>>>>>> 1369 FREE_C_HEAP_ARRAY(char*, opath);
>> >> > >>>>>>>
>> >> > >>>>>>> 1377 //release allocated storage before returning null
>> >> > >>>>>>> 1378 while (i > 0) {
>> >> > >>>>>>> 1379 i--;
>> >> > >>>>>>> 1380 if (opath[i] != NULL) {
>> >> > >>>>>>> 1381 FREE_C_HEAP_ARRAY(char, opath[i]);
>> >> > >>>>>>> 1382 }
>> >> > >>>>>>> 1383 }
>> >> > >>>>>>> 1384 FREE_C_HEAP_ARRAY(char*, opath);
>> >> > >>>>>>>
>> >> > >>>>>>> This duplicated fragments is worth to refactor to a function.
>> >> > >>>>>>> Also a space is missed at the beginning of the comment.
>> >> > >>>>>>>
>> >> > >>>>>>>
>> >> > >>>>>>> Thanks,
>> >> > >>>>>>> Serguei
>> >> > >>>>>>>
>> >> > >>>>>>>
>> >> > >>>>>>>
>> >> > >>>>>>> On 7/31/19 02:01, Adam Farley8 wrote:
>> >> > >>>>>>> Hi All,
>> >> > >>>>>>>
>> >> > >>>>>>> Reviewers requested for the change below.
>> >> > >>>>>>>
>> >> > >>>>>>> @David - Agreed. Would you be prepared to sponsor the change?
>> >> > >>>>>>>
>> >> > >>>>>>> Bug: https://urldefense.proofpoint.com/v2/url?
>> >> > >>>>> u=https-3A__bugs.openjdk.java.net_browse_JDK-2D8227021&d=DwID-
>> >> > >>>>> g&c=jf_iaSHvJObTbx-siA1ZOg&r=P5m8KWUXJf-
>> >> > >>>>> CeVJc0hDGD9AQ2LkcXDC0PMV9ntVw5Ho&m=8Wa8Zdfmvn-
>> >> > >>>>>
>> >> > >>
>> >> >
>> >>
>> yvzvCAhOyJ_etFblRA4vmLGbKF4aW8PY&s=xykJ0KLy9AKWO8zmC0amfR7xxUsvyKEjlf3y7WWOqvE&e=
>> >> > >>
>> >> > >>>>>>> Webrev: https://urldefense.proofpoint.com/v2/url?
>> >> > >>>>> u=http-3A__cr.openjdk.java.net_-7Eafarley_8227021.2_webrev_&d=DwID-
>> >> > >>>>> g&c=jf_iaSHvJObTbx-siA1ZOg&r=P5m8KWUXJf-
>> >> > >>>>> CeVJc0hDGD9AQ2LkcXDC0PMV9ntVw5Ho&m=8Wa8Zdfmvn-
>> >> > >>>>>
>> >> > >>
>> >> >
>> >>
>> yvzvCAhOyJ_etFblRA4vmLGbKF4aW8PY&s=NvIza4VVWG3CiDhmQVmXsghH_4h_c5mFJbHwkCUcut0&e=
>> >> > >>
>> >> > >>>>>>> Best Regards
>> >> > >>>>>>>
>> >> > >>>>>>> Adam Farley
>> >> > >>>>>>> IBM Runtimes
>> >> > >>>>>>>
>> >> > >>>>>>> P.S. Remembered to add the links this time. :)
>> >> > >>>>>>>
>> >> > >>>>>>>
>> >> > >>>>>>> David Holmes <david.holmes at oracle.com> wrote on 30/07/2019
>> >> > >> 03:37:53:
>> >> > >>>>>>>> From: David Holmes <david.holmes at oracle.com>
>> >> > >>>>>>>> To: Adam Farley8 <adam.farley at uk.ibm.com>
>> >> > >>>>>>>> Cc: hotspot-dev at openjdk.java.net, serviceability-dev
>> >> > >>>>>>>> <serviceability-dev at openjdk.java.net>
>> >> > >>>>>>>> Date: 30/07/2019 03:38
>> >> > >>>>>>>> Subject: Re: RFR: JDK-8227021: VM fails if any
>> >> > >> sun.boot.library.path
>> >> > >>>>>>>> paths are longer than JVM_MAXPATHLEN
>> >> > >>>>>>>>
>> >> > >>>>>>>> Hi Adam,
>> >> > >>>>>>>>
>> >> > >>>>>>>> On 25/07/2019 3:57 am, Adam Farley8 wrote:
>> >> > >>>>>>>>> Hi David,
>> >> > >>>>>>>>>
>> >> > >>>>>>>>> Welcome back. :)
>> >> > >>>>>>>> Thanks. Sorry for the delay in getting back to this.
>> >> > >>>>>>>>
>> >> > >>>>>>>> I like .v2 as it is much simpler (notwithstanding freeing
>> >> > >>> the already
>> >> > >>>>>>>> allocated arrays adds some complexity - thanks for
>> fixing that).
>> >> > >>>>>>>>
>> >> > >>>>>>>> I'm still not sure we can't optimise things better for
>> >> > >> unchangeable
>> >> > >>>>>>>> properties like the boot libary path, but that's another RFE.
>> >> > >>>>>>>>
>> >> > >>>>>>>> Thanks,
>> >> > >>>>>>>> David
>> >> > >>>>>>>>
>> >> > >>>>>>> Unless stated otherwise above:
>> >> > >>>>>>> IBM United Kingdom Limited - Registered in England and
>> Wales with
>> >> > >>>>>>> number 741598.
>> >> > >>>>>>> Registered office: PO Box 41, North Harbour, Portsmouth,
>> >> > >>> Hampshire PO6 3AU
>> >> > >>>>>> Unless stated otherwise above:
>> >> > >>>>>> IBM United Kingdom Limited - Registered in England and
>> Wales with
>> >> > >> number
>> >> > >>>>>> 741598.
>> >> > >>>>>> Registered office: PO Box 41, North Harbour, Portsmouth,
>> >> > >>> Hampshire PO6 3AU
>> >> > >>>> Unless stated otherwise above:
>> >> > >>>> IBM United Kingdom Limited - Registered in England and Wales with
>> >> > >> number
>> >> > >>>> 741598.
>> >> > >>>> Registered office: PO Box 41, North Harbour, Portsmouth,
>> Hampshire PO6
>> >> > >> 3AU
>> >> > >> Unless stated otherwise above:
>> >> > >> IBM United Kingdom Limited - Registered in England and
>> Wales with number
>> >> > >> 741598.
>> >> > >> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire
>> >> > >> PO6 3AU
>> >> > >>
>> >> > >
>> >> >
>> >> >
>> >>
>> >> Unless stated otherwise above:
>> >> IBM United Kingdom Limited - Registered in England and Wales with
>> >> number 741598.
>> >> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
>> > Unless stated otherwise above:
>> > IBM United Kingdom Limited - Registered in England and Wales with number
>> > 741598.
>> > Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
>>
>
> Unless stated otherwise above:
> IBM United Kingdom Limited - Registered in England and Wales with number
> 741598.
> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
More information about the hotspot-dev
mailing list