add test to protect scanimage from incorrect group options

merge-requests/1/head
Stphane Voltz 2013-06-19 17:28:04 +02:00
rodzic 41c6c1644f
commit ce90b61894
3 zmienionych plików z 20 dodań i 11 usunięć

Wyświetl plik

@ -1,3 +1,9 @@
2013-06-19 Stéphane Voltz <stef.dev@free.fr>
* frontend/scanimage.c: protect for group option with incorrect
capabilites.
* frontend/tstbackend.c: add test to check is group option are
settable. Fix test_getdevices() function.
2013-06-18 Stéphane Voltz <stef.dev@free.fr> 2013-06-18 Stéphane Voltz <stef.dev@free.fr>
* backend/genesys.c: add missing cap to 2 option group tp fix long * backend/genesys.c: add missing cap to 2 option group tp fix long
argument option bug in scanimage. argument option bug in scanimage.

Wyświetl plik

@ -894,7 +894,8 @@ fetch_options (SANE_Device * device)
exit (1); exit (1);
} }
if (!SANE_OPTION_IS_SETTABLE (opt->cap)) /* create command line option only for settable options */
if (!SANE_OPTION_IS_SETTABLE (opt->cap) || opt->type == SANE_TYPE_GROUP)
continue; continue;
option_number[option_count] = i; option_number[option_count] = i;

Wyświetl plik

@ -403,6 +403,8 @@ test_options (SANE_Device * device, int can_do_recursive)
if (opt->type == SANE_TYPE_GROUP) { if (opt->type == SANE_TYPE_GROUP) {
check(INF, (opt->name == NULL || *opt->name == 0), check(INF, (opt->name == NULL || *opt->name == 0),
"option [%d, %s] has a name", option_num, opt->name); "option [%d, %s] has a name", option_num, opt->name);
check(ERR, (!SANE_OPTION_IS_SETTABLE (opt->cap)),
"option [%d, %s], group option is settable", option_num, opt->name);
} else { } else {
if (option_num == 0) { if (option_num == 0) {
check(ERR, (opt->name != NULL && *opt->name ==0), check(ERR, (opt->name != NULL && *opt->name ==0),
@ -1565,21 +1567,21 @@ static void test_scans(SANE_Device * device)
* @param time time to loop * @param time time to loop
* @return 0 on success * @return 0 on success
*/ */
static int test_get_devices(const SANE_Device **device_list, int time) static int test_get_devices(const SANE_Device ***device_list, int time)
{ {
int loop=0; int loop=0;
int i; int i;
const SANE_Device *dev; const SANE_Device *dev;
SANE_Status status; SANE_Status status;
status = sane_get_devices (&device_list, SANE_TRUE); status = sane_get_devices (device_list, SANE_TRUE);
check(FATAL, (status == SANE_STATUS_GOOD), check(FATAL, (status == SANE_STATUS_GOOD),
"sane_get_devices() failed (%s)", sane_strstatus (status)); "sane_get_devices() failed (%s)", sane_strstatus (status));
/* Verify that the SANE doc (or tstbackend) is up to date */ /* Verify that the SANE doc (or tstbackend) is up to date */
for (i=0; device_list[i] != NULL; i++) { for (i=0; (*device_list)[i] != NULL; i++) {
dev = device_list[i]; dev = (*device_list)[i];
check(FATAL, (dev->name != NULL), "device name is NULL"); check(FATAL, (dev->name != NULL), "device name is NULL");
check(FATAL, (dev->vendor != NULL), "device vendor is NULL"); check(FATAL, (dev->vendor != NULL), "device vendor is NULL");
@ -1636,16 +1638,16 @@ SANE_Status status;
while(loop<time) { while(loop<time) {
/* print and free detected device list */ /* print and free detected device list */
check(MSG, 0, "DETECTED DEVICES:"); check(MSG, 0, "DETECTED DEVICES:");
for (i=0; device_list[i] != NULL; i++) { for (i=0; (*device_list)[i] != NULL; i++) {
dev = device_list[i]; dev = (*device_list)[i];
check(MSG, 0, "\t%s:%s %s:%s", dev->vendor, dev->name, dev->type, dev->model); check(MSG, 0, "\t%s:%s %s:%s", dev->vendor, dev->name, dev->type, dev->model);
} }
if(i==0) { if(i==0) {
check(MSG, 0, "\tnone..."); check(MSG, 0, "\tnone...");
} }
sleep(1); sleep(1);
device_list = NULL; (*device_list) = NULL;
status = sane_get_devices (&device_list, SANE_TRUE); status = sane_get_devices (device_list, SANE_TRUE);
check(FATAL, (status == SANE_STATUS_GOOD), check(FATAL, (status == SANE_STATUS_GOOD),
"sane_get_devices() failed (%s)", sane_strstatus (status)); "sane_get_devices() failed (%s)", sane_strstatus (status));
loop++; loop++;
@ -1782,8 +1784,8 @@ main (int argc, char **argv)
"sane_init failed with %s", sane_strstatus (status)); "sane_init failed with %s", sane_strstatus (status));
/* Check the device list */ /* Check the device list */
rc = test_get_devices(device_list, time); rc = test_get_devices(&device_list, time);
if (!rc) goto the_exit; if (rc) goto the_exit;
if (!devname) { if (!devname) {
/* If no device name was specified explicitly, we look at the /* If no device name was specified explicitly, we look at the