Patch Name: PHCO_27564 Patch Description: s700_800 10.20 sort(1) cumulative patch Creation Date: 02/11/19 Post Date: 02/12/12 Hardware Platforms - OS Releases: s700: 10.20 s800: 10.20 Products: N/A Filesets: OS-Core.UX-CORE Automatic Reboot?: No Status: General Release Critical: No Path Name: /hp-ux_patches/s700_800/10.X/PHCO_27564 Symptoms: PHCO_27564: 1. Improper handling of certain files by sort(1). 2. When sorting by field, sort(1) skips the last character if a file does not terminate with a newline character and LANG is set to a locale other than C. 3. sort '-o' option loops infinitely, and a line repeats itself forever as an output only in certain situations for multibyte locales. PHCO_19559: 1. sort(1) gives an error "... more than 20480 characters" on ja_JP.SJIS locale. 2. sort -u fails to remove duplicates in non-C locales 3. sort(1) misbehaves for huge data intermittently PHCO_17799: 1. sort -k1 option fails for ascii characters whose value is > 127. PHCO_15833: 1. sort(1) reports errors while sorting binary data. sort(1) will not support binary data after 10.20. PHCO_13500: 1. UTF8 changes incorporated for various options for sort PHCO_10589: 1. sort(1) behaves incorrectly when the field_end for a sort key is not specified PHCO_8768: 1. Customer uses command "sort -t "|" " on HP-UX 10.01. He gets an error message: "A line of the input file contains more than 20480 characters." This error does only occur if LANG is set to de_DE.iso88591, with LANG="C" everything works fine. Defect Description: PHCO_27564: 1. Improper handling of certain files by sort(1). Resolution: The code has been modified to handle the files appropriately. 2. When sorting (by field) a file which does not have a terminating newline, and where the LANG variable is not set to C, the command does not output the last character of the file. The problem occurred because the integer counter was not being incremented to handle the new line character. Here are the steps to reproduce the problem: # echo 'one one\ntwo two\c' > TST # cat TST one one two two [ note that there is no newline at the end of file ] # unset LANG ## First, the correct results: # sort -k 1,1 TST sort: Warning: A newline character was added to the end of file TST. one one two two # export LANG=french # sort -k 1,1 TST sort: Warning: A newline character was added to the end of file TST. sort: Warning: A newline character was added to the end of file TST. one one two tw <=== the "o" in "two" has been removed Resolution: The problem was due to one of the variable (used to count the number of newlines) not getting properly incremented when the newline appears. The problem was corrected by incrementing the counter to handle the newline character appropriately. 3. The sort(1) command loops infinitely in certain cases, and the problem was due the incorrect return value on encountering WEOF.It was not returning a NULL at end of file hence sort(1) went into an infinite loop as it was not able to fine the end of file.This occurred only in case of multibyte locales. Resolution: The sort(1) code has been modified to return NULL on encountering EOF. PHCO_19559: 1. When record length is equal to the space available on the buffer, sort(1) gives an error "... more than 20480 characters" for non C locales. This is because sort(1) was not able to store the NULL appended record in the buffer. Resolution: If record length is exactly equal to the available space on the buffer, a temporary buffer is allocated to write the record. 2. sort -u fails to remove duplicates in non-C locales due to the improper copying of record (key sequence + actual record) to the save area. Resolution: Instead of copying the record, the save and record pointers have been swapped. 3. grow_core() calls realloc() even though the maximum buffer size is reached. Resolution: The current size of the buffer is checked against the maximum limit to the buffer size. If the two are equal grow_core() returns 0 without reallocating further. PHCO_17799: 1. sort -k1 option was failing for ascii characters with values > 127 due to improper typecasting of the pointer variable holding the characters to be sort Resolution: The pointer variable holding data to be sorted has been typecasted to unsigned character to facilitate correct sorting of ascii characters > 127. PHCO_15833: 1. sort(1) was allowing binary input when it should not have, as binary data is not supported. sort(1) will not handle binary input after 10.20. PHCO_13500: 1. Enhanced the sort option -i for UTF8 locale changes PHCO_10589: 1. sort(1) behaves incorrectly when the field_end for a sort key is not specified PHCO_8768: 1. Customer uses command "sort -t "|" " on HP-UX 10.01. He gets an error message: "A line of the input file contains more than 20480 characters." This error does only occur if LANG is set to de_DE.iso88591, with LANG="C" everything works fine. SR: 8606259335 8606202868 8606215245 8606225452 4701427807 8606100923 8606101619 5003448423 1653260414 4701377283 1653184259 1653182055 4701349837 8606275377 Patch Files: /usr/bin/sort what(1) Output: /usr/bin/sort: $Revision: 78.5.1.19 $ PATCH_10_20: sort.o hpux_rel.o 02/11/19 PATCH-PHCO_20441 for 10.20; for 10.30, 11.x compatib ility libc.a_ID@@/main/r10dav/libc_dav/libc_ dav_cpe/9 /ux/core/libs/libc/archive_pa1/libc.a_ID Nov 10 1999 10:43:44 cksum(1) Output: 2875284400 245760 /usr/bin/sort Patch Conflicts: None Patch Dependencies: None Hardware Dependencies: None Other Dependencies: None Supersedes: PHCO_19559 PHCO_17799 PHCO_15833 PHCO_13500 PHCO_10589 PHCO_8768 Equivalent Patches: PHCO_27565: s700: 11.00 s800: 11.00 PHCO_25918: s700: 11.11 s800: 11.11 Patch Package Size: 300 KBytes Installation Instructions: Please review all instructions and the Hewlett-Packard SupportLine User Guide or your Hewlett-Packard support terms and conditions for precautions, scope of license, restrictions, and, limitation of liability and warranties, before installing this patch. ------------------------------------------------------------ 1. Back up your system before installing a patch. 2. Login as root. 3. Copy the patch to the /tmp directory. 4. Move to the /tmp directory and unshar the patch: cd /tmp sh PHCO_27564 5a. For a standalone system, run swinstall to install the patch: swinstall -x autoreboot=true -x match_target=true \ -s /tmp/PHCO_27564.depot By default swinstall will archive the original software in /var/adm/sw/patch/PHCO_27564. If you do not wish to retain a copy of the original software, you can create an empty file named /var/adm/sw/patch/PATCH_NOSAVE. WARNING: If this file exists when a patch is installed, the patch cannot be deinstalled. Please be careful when using this feature. It is recommended that you move the PHCO_27564.text file to /var/adm/sw/patch for future reference. To put this patch on a magnetic tape and install from the tape drive, use the command: dd if=/tmp/PHCO_27564.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: None