Closed Bug 147940 Opened 22 years ago Closed 22 years ago

PR_GetSystemInfo(PR_SI_HOSTNAME, ...) is broken

Categories

(NSPR :: NSPR, defect)

PowerPC
Mac System 9.x
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED DUPLICATE of bug 92516

People

(Reporter: rogerd, Assigned: wtc)

Details

PR_GetSystemInfo(PR_SI_HOSTNAME, ...) on Mac is returning a string containing
the IP address converted to a string with the first '.' converted to '\0'. E.g.
if my IP address is 12.34.56.78, it is returning (including terminating nulls):
'12\0.34.56.78\0' Taken as a conventional C string, this is just "12"; which is
not usable as a hostname. Looking at the code this seems to be a combination of
two hacks:

a) on Mac, there is no hostname, so the IP address in string form is being used
instead

b) somone (presumably later) added code inside PR_GetSystemInfo(PR_SI_HOSTNAME,
...) to convert a fully qualified hostname into an unqualified hostname by
replacing the first '.' in the string with a '\0' (the code looks like it's
trying to replace every '.' with a '\0', but it has a bug so it in fact only
gets the first one). I have no idea why anyone would think that it was more
useful to return an unqualified hostname than a fully qualified one (the caller
can always convert a fully qualified one into an unqualified one, but not vice
versa), but applied to an IP address used in place of a hostname this hack is fatal.

This has resulted in the following nasty hack in my code where I undo the damage
done by b):

  {
    char vBuf[SYS_INFO_BUFFER_LENGTH];
    vBuf[SYS_INFO_BUFFER_LENGTH - 1] = '\0';
    if (PR_SUCCESS == PR_GetSystemInfo(PR_SI_HOSTNAME,
                                       vBuf,
                                       SYS_INFO_BUFFER_LENGTH))
    {
      PRHostEnt vHostEnt;
      char vBuf2[PR_NETDB_BUF_SIZE];

      if (PR_SUCCESS == PR_GetHostByName(vBuf,
                                         vBuf2,
                                         PR_NETDB_BUF_SIZE,
                                         &vHostEnt))
      {
        ...
      }
      /* Horible hack to fix broken NSPR implementation */
      else if (CC_strlen(vBuf) < SYS_INFO_BUFFER_LENGTH - 1)
      {
        vBuf[CC_strlen(vBuf)] = '.';
        if (PR_SUCCESS == PR_GetHostByName(vBuf,
                                           vBuf2,
                                           PR_NETDB_BUF_SIZE,
                                           &vHostEnt))
        {
          ...
        }
      }
    }
  }

Could someone please fix this?

*** This bug has been marked as a duplicate of 92516 ***
Status: NEW → RESOLVED
Closed: 22 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.