libvirt/tests
Eric Blake f18c02ec22 util: fix uint parsing on 64-bit platforms
Commit f22b7899 called to light a long-standing latent bug: the
behavior of virStrToLong_ui was different on 32-bit platforms
than on 64-bit platforms.  Curse you, C type promotion and
narrowing rules, and strtoul specification.  POSIX says that for
a 32-bit long, strtol handles only 2^32 values [LONG_MIN to
LONG_MAX] while strtoul handles 2^33 - 1 values [-ULONG_MAX to
ULONG_MAX] with twos-complement wraparound for negatives.  Thus,
parsing -1 as unsigned long produces ULONG_MAX, rather than a
range error.  We WANT[1] this same shortcut for turning -1 into
UINT_MAX when parsing to int; and get it for free with 32-bit
long.  But with 64-bit long, ULONG_MAX is outside the range
of int and we were rejecting it as invalid; meanwhile, we were
silently treating -18446744073709551615 as 1 even though it
textually exceeds INT_MIN.  Too bad there's not a strtoui() in
libc that does guaranteed parsing to int, regardless of the size
of long.

The bug has been latent since 2007, introduced by Jim Meyering
in commit 5d25419 in the attempt to eradicate unsafe use of
strto[u]l when parsing ints and longs.  How embarrassing that we
are only discovering it now - so I'm adding a testsuite to ensure
that it covers all the corner cases we care about.

[1] Ideally, we really want the caller to be able to choose whether
to allow negative numbers to wrap around to their 2s-complement
counterpart, as in strtoul, or to force a stricter input range
of [0 to UINT_MAX] by rejecting negative signs; this will be added
in a later patch for all three int types.

This patch is tested on both 32- and 64-bit; the enhanced
virstringtest passes on both platforms, while virstoragetest now
reliably fails on both platforms instead of just 32-bit platforms.
That test will be fixed later.

* src/util/virstring.c (virStrToLong_ui): Ensure same behavior
regardless of platform long size.
* tests/virstringtest.c (testStringToLong): New function.
(mymain): Comprehensively test string to long parsing.

Signed-off-by: Eric Blake <eblake@redhat.com>
2014-05-01 15:11:02 -06:00
..
bhyvexml2argvdata tests: add bhyve xml2xml test 2014-04-08 20:50:36 +04:00
bhyvexml2xmloutdata tests: add bhyve xml2xml test 2014-04-08 20:50:36 +04:00
capabilityschemadata capabilities: add baselabel per sec driver/virt type to secmodel 2013-10-29 07:06:04 -06:00
commanddata build: clean up stray files found by 'make distcheck' 2013-05-06 14:01:08 -06:00
confdata
cputestdata tests: Add more tests for virConnectBaselineCPU 2014-01-28 21:27:37 +01:00
domainconfdata Rename virDomainGetRootFilesystem to virDomainGetFilesystemForTarget 2014-02-20 15:50:46 +00:00
domainschemadata conf: Output disk backing store details in domain XML 2014-04-24 16:06:13 +02:00
domainsnapshotxml2xmlin conf: split <disk> schema into more pieces 2014-04-16 10:45:55 +02:00
domainsnapshotxml2xmlout snapshot: Add support for specifying snapshot disk backing type 2014-01-29 12:56:35 +01:00
fchostdata/fc_host tests: Add tests for fc_host 2013-05-13 17:24:18 +08:00
interfaceschemadata
lxcconf2xmldata lxc conf2xml: don't let current vcpus at 0: define won't like it 2014-04-07 10:52:28 -06:00
lxcxml2xmldata schema: fix idmap validation 2014-01-10 10:54:14 -07:00
lxcxml2xmloutdata Allow root directory in filesystem source dir schema 2013-11-07 18:43:15 +01:00
networkxml2confdata network: fix problems with SRV records 2014-03-26 16:42:43 +02:00
networkxml2firewalldata Add test for converting network XML to iptables rules 2014-04-25 15:44:09 +01:00
networkxml2xmlin Add forwarder attribute to <dns/> element 2013-09-17 17:47:33 -06:00
networkxml2xmlout network: change default of forwardPlainNames to 'yes' 2014-02-04 12:00:26 +02:00
networkxml2xmlupdatein Test network update XML parsing 2013-08-28 08:05:46 +02:00
networkxml2xmlupdateout network: change default of forwardPlainNames to 'yes' 2014-02-04 12:00:26 +02:00
nodedevschemadata nodedev: add iommuGroup to node device object 2013-06-26 14:10:56 -04:00
nodeinfodata Add test for linuxNodeGetCPUStats 2014-01-27 11:04:02 +01:00
nwfilterxml2firewalldata Add a test suite for nwfilter ebiptables tech driver 2014-04-25 15:44:10 +01:00
nwfilterxml2xmlin
nwfilterxml2xmlout
qemucapabilitiesdata qemu: Add USB keyboard capability 2014-02-19 09:16:31 +01:00
qemucaps2xmldata qemu: add unit tests for the capabilities xml 2014-03-26 13:41:25 +01:00
qemuhelpdata qemu: Support setting the 'removable' flag for USB disks 2013-09-02 14:45:38 +02:00
qemuhotplugtestdata qemuhotplugtest: Fix mem-leaking testcases 2014-03-19 14:48:58 +01:00
qemumonitorjsondata qemu: Add monitor APIs to fetch CPUID data from QEMU 2013-11-08 09:44:36 +01:00
qemuxml2argvdata tests: Test backing store XML formatting and parsing 2014-04-24 16:07:56 +02:00
qemuxml2xmloutdata tests: Test backing store XML formatting and parsing 2014-04-24 16:07:56 +02:00
qemuxmlnsdata qemu: Set QEMU_AUDIO_DRV=none with -nographic 2013-09-02 16:53:39 -04:00
secretxml2xmlin Add tests for secret XML parsing 2014-02-14 16:47:14 +01:00
securityselinuxhelperdata tests: Flesh out securityselinuxhelper 2014-03-07 14:02:10 +01:00
securityselinuxlabeldata selinux: enhance test to cover nfs label failure 2013-08-20 10:46:58 -06:00
sexpr2xmldata conf: Format and parse backing chains in domain XML 2014-04-24 16:06:18 +02:00
storagepoolschemadata schema: require target path in storage pool xml 2013-05-17 08:33:22 +02:00
storagepoolxml2xmlin storage: document gluster pool 2013-11-25 11:03:19 -07:00
storagepoolxml2xmlout storage: document gluster pool 2013-11-25 11:03:19 -07:00
storagevolschemadata schema: make source optional in volume XML 2013-05-17 08:35:08 +02:00
storagevolxml2argvdata Always specify qcow2 compat level on qemu-img command line 2013-08-27 12:45:58 +02:00
storagevolxml2xmlin storage: improve directory support in gluster pool 2013-11-25 12:46:19 -07:00
storagevolxml2xmlout storage: improve directory support in gluster pool 2013-11-25 12:46:19 -07:00
sysinfodata aarch64: Fix sysinfo test. 2014-01-01 16:34:13 +00:00
virfiledata Fix bug in identifying sub-mounts 2013-11-28 11:49:01 +00:00
virpcitestdata tests: Fix PCI test data filenames for Windows 2014-01-25 12:53:11 +01:00
virscsidata tests: Fix SCSI test data filenames for Windows 2014-03-29 21:14:15 +01:00
virusbtestdata/sys_bus_usb/devices Add tests for virUSBDeviceFind functions 2014-03-03 14:35:22 +01:00
vmwareverdata VMware: Add Fusion version test 2013-09-30 16:58:37 -05:00
vmx2xmldata conf: Add keyboard input device type 2014-02-19 09:16:31 +01:00
xencapsdata
xmconfigdata conf: Add keyboard input device type 2014-02-19 09:16:31 +01:00
xml2sexprdata
xml2vmxdata esx: Fix floppy.fileName handling in the vmx file parser 2013-10-15 11:39:02 +01:00
.valgrind.supp valgrind: Adjust filter for _dl_allocate_tls 2013-08-01 17:04:28 -04:00
bhyvexml2argvmock.c bhyve: add xml2args unittest 2014-03-27 08:33:41 +04:00
bhyvexml2argvtest.c tests: use virBhyveCapsBuild in bhyvexml2argv test 2014-04-09 10:27:16 +04:00
bhyvexml2xmltest.c tests: add bhyve xml2xml test 2014-04-08 20:50:36 +04:00
capabilityschematest
commandhelper.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
commandtest.c Coverity: Resolve a FORWARD_NULL 2014-03-25 17:13:27 -04:00
cpuset virBitmapParse: Fix behavior in case of error and fix up callers 2013-08-22 11:38:36 +02:00
cputest.c Use virFileFindResource to locate CPU map XML 2014-04-25 11:59:46 +01:00
define-dev-segfault
domainconftest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
domainschematest LXC: Fix handling of RAM filesystem size units 2013-10-09 17:44:45 +02:00
domainsnapshotschematest
domainsnapshotxml2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
esxutilstest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
eventtest.c Add virLogSource variables to all source files 2014-03-18 14:29:22 +00:00
fchosttest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
fdstreamtest.c Use virFileFindResource to locate iohelper for fdstream 2014-04-25 11:59:46 +01:00
int-overflow
interfaceschematest
interfacexml2xmltest.c Require spaces around equality comparisons 2014-03-18 11:29:44 +01:00
jsontest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
libvirtd-fail
libvirtd-pool
libvirtdconftest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
lxcconf2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
lxcxml2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
Makefile.am build: add nwfilterxml2firewalldata to dist 2014-04-25 17:49:02 +01:00
metadatatest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
networkschematest
networkxml2conftest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
networkxml2firewalltest.c networkxml2firewalltest: fix build failure on freebsd 2014-04-30 10:16:09 +02:00
networkxml2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
networkxml2xmlupdatetest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
nodedevschematest
nodedevxml2xmltest.c Require spaces around equality comparisons 2014-03-18 11:29:44 +01:00
nodeinfotest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
nwfilterebiptablestest.c nwfilter: Tear down temp. filters when tearing all filters 2014-04-30 12:51:38 -04:00
nwfilterschematest
nwfilterxml2firewalltest.c Add a test suite for nwfilter ebiptables tech driver 2014-04-25 15:44:10 +01:00
nwfilterxml2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
objecteventtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
objectlocking.ml tests: cleanup object-locking test 2014-03-18 10:20:49 +01:00
oomtrace.pl
openvzutilstest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
openvzutilstest.conf
pkix_asn1_tab.c
qemuagenttest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
qemuargv2xmltest.c tests: drop dead code from argv2xml and xml2xml 2014-04-11 13:02:09 -06:00
qemucapabilitiestest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
qemucaps2xmltest.c Fix memory leak in testGetCaps() 2014-03-27 07:22:10 +01:00
qemuhelptest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
qemuhotplugtest.c qemuDomainAttachDeviceFlags: Parse device xml as inactive 2014-03-26 13:49:47 +01:00
qemumonitorjsontest.c hash: add common utility functions 2014-04-07 06:14:45 -06:00
qemumonitortest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
qemumonitortestutils.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
qemumonitortestutils.h tests: Learn qemuMonitorTestNew optional greeting 2013-10-01 10:48:47 +02:00
qemuxml2argvmock.c qemuxml2argvmock: Mock time() on non-linux platforms too 2014-02-06 15:15:10 +01:00
qemuxml2argvtest.c Use virFileFindResource to locate CPU map XML 2014-04-25 11:59:46 +01:00
qemuxml2xmltest.c tests: Test backing store XML formatting and parsing 2014-04-24 16:07:56 +02:00
qemuxmlnstest.c Use virFileFindResource to locate CPU map XML 2014-04-25 11:59:46 +01:00
read-bufsiz
read-non-seekable
reconnect.c util: make it easier to grab only regular command exit 2014-03-03 12:40:32 -07:00
schematestutils.sh tests: skip schema validation tests if xmllint is missing 2013-08-23 15:23:44 -06:00
seclabeltest.c tests: uniformly report test failures 2013-02-25 17:38:11 -07:00
secretschematest Add tests for secret XML parsing 2014-02-14 16:47:14 +01:00
secretxml2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
securityselinuxhelper.c tests: Fix SELinux tests in VPATH build 2014-03-10 10:20:30 +01:00
securityselinuxlabeltest.c conf: move host disk type to util/ 2014-04-01 10:38:13 -06:00
securityselinuxtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
sexpr2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
shunloadhelper.c Use K&R style for curly braces in tests/ 2014-03-20 17:06:38 +01:00
shunloadtest.c build: fix shunloadtest breakage 2013-07-29 13:09:39 -06:00
sockettest.c Fix unitialized data in virSocketAddrMask 2014-03-20 12:15:00 +00:00
ssh.c build: fix shunloadtest breakage 2013-07-29 13:09:39 -06:00
start
statstest.c Require spaces around equality comparisons 2014-03-18 11:29:44 +01:00
storagebackendsheepdogtest.c conf: track sizes directly in source struct 2014-04-02 06:03:00 -06:00
storagepoolschematest schema: require target path in storage pool xml 2013-05-17 08:33:22 +02:00
storagepoolxml2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
storagevolschematest schema: make source optional in volume XML 2013-05-17 08:35:08 +02:00
storagevolxml2argvtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
storagevolxml2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
sysinfotest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
test_conf.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
test_conf.sh rename tests/conftest.c 2013-03-19 13:13:28 -06:00
test-lib.sh test-lib: Make case skipping possible 2013-09-13 10:25:56 +02:00
testutils.c Add test for converting network XML to iptables rules 2014-04-25 15:44:09 +01:00
testutils.h Add test for converting network XML to iptables rules 2014-04-25 15:44:09 +01:00
testutilslxc.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
testutilslxc.h Don't leave empty first line in C source files 2014-03-18 12:17:12 +01:00
testutilsqemu.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
testutilsqemu.h build: skip qemu in tests when !WITH_QEMU 2013-05-31 11:35:34 -06:00
testutilsxen.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
testutilsxen.h Don't leave empty first line in C source files 2014-03-18 12:17:12 +01:00
utiltest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
vcpupin
viralloctest.c Add test suite for viralloc APIs 2014-04-25 11:29:55 +01:00
viratomictest.c maint: fix comma style issues: tests, tools 2013-11-20 09:14:55 -07:00
virauthconfigtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virbitmaptest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virbuftest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
vircapstest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
vircgroupmock.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
vircgrouptest.c Extend virCgroupGetPercpuStats to fill in vcputime too 2014-04-09 16:24:08 +02:00
vircryptotest.c Add helper APIs for generating cryptographic hashes 2014-03-10 16:39:18 +00:00
virdbustest.c Fix Memory Leak in testMessageArrayRef() 2014-03-31 14:56:17 -06:00
virdrivermoduletest.c Use virFileFindResource to locate driver plugins 2014-04-25 11:59:46 +01:00
virendiantest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virfiletest.c Fix bug in identifying sub-mounts 2013-11-28 11:49:01 +00:00
virfirewalltest.c Introduce an object for managing firewall rulesets 2014-04-25 15:44:09 +01:00
virhashdata.h
virhashtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virhostdevtest.c tests: remove hostdevmgr directory on cleanup 2014-04-28 22:58:10 +02:00
viridentitytest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
viriscsitest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virkeycodetest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virkeyfiletest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virkmodtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virlockspacetest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virlogtest.c Fix flaw in detecting log format 2013-10-14 10:31:01 +01:00
virmock.h Conditionalize include of dlfcn.h in virmock.h 2014-04-25 15:48:30 +01:00
virmockdbus.c Create a re-usable DBus LD_PRELOAD mock library 2014-04-08 11:03:59 +01:00
virnetdevbandwidthtest.c QoS: make tc filters match all traffic 2014-04-07 11:35:29 +02:00
virnetmessagetest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virnetserverclientmock.c Add test case for virNetServerClient object identity code 2013-09-24 09:37:26 +01:00
virnetserverclienttest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virnetsockettest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virnettlscontexttest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virnettlshelpers.c Add virLogSource variables to all source files 2014-03-18 14:29:22 +00:00
virnettlshelpers.h Fix parallel runs of TLS test suites 2013-08-09 11:54:41 +01:00
virnettlssessiontest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virpcimock.c Replace Pci with PCI throughout 2014-04-08 11:15:55 +01:00
virpcitest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virportallocatortest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virscsitest.c tests: Fix SCSI test data filenames for Windows 2014-03-29 21:14:15 +01:00
virsh-all tests: Skip virsh-all test as expensive 2013-08-12 18:47:56 +02:00
virsh-optparse virsh: Add keepalive in new vshConnect function 2014-03-18 08:27:29 +01:00
virsh-schedinfo Allow multiple parameters for schedinfo 2013-04-03 08:49:30 +02:00
virsh-synopsis
virsh-undefine
virsh-uriprecedence tests: Don't test user config file if ran as root 2013-09-13 10:25:56 +02:00
virshtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virstoragetest.c Add support for addressing backing stores by index 2014-04-25 11:11:03 +02:00
virstringtest.c util: fix uint parsing on 64-bit platforms 2014-05-01 15:11:02 -06:00
virsystemdtest.c Introduce --without-pm-utils to get rid of pm-is-supported dependency 2014-04-11 15:51:10 -06:00
virt-aa-helper-test Fix typos in src/* 2014-04-21 16:49:08 -06:00
virtimetest.c Add virLogSource variables to all source files 2014-03-18 14:29:22 +00:00
viruritest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virusbmock.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
virusbtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
vmwarevertest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
vmx2xmltest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
xencapstest.c Use K&R style for curly braces in tests/ 2014-03-20 17:06:38 +01:00
xmconfigtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
xml2sexprtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00
xml2vmxtest.c Indent top-level labels by one space in tests/ 2014-03-25 14:58:41 +01:00