New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'lpq -h anything' segfaults #1515

Closed
michaelrsweet opened this Issue Mar 27, 2006 · 2 comments

Comments

Projects
None yet
1 participant
@michaelrsweet
Collaborator

michaelrsweet commented Mar 27, 2006

Version: 1.2b2
CUPS.org User: twaugh.redhat

Using the '-h' option to lpq causes it to segfault. Here is a patch that causes it not to segfault, but I don't think the -h functionality is working either.

--- cups-1.2rc1/berkeley/lpq.c.lpq 2006-03-27 12:12:04.000000000 +0100
+++ cups-1.2rc1/berkeley/lpq.c 2006-03-27 12:12:11.000000000 +0100
@@ -186,9 +186,6 @@
break;

     case 'h' : /* Connect to host */
  •       if (http != NULL)
    

- httpClose(http);

        if (argv[i][2] != '\0')
           cupsSetServer(argv[i] + 2);
        else

The problem is that 'http' is used after it is closed.

@michaelrsweet

This comment has been minimized.

Collaborator

michaelrsweet commented Mar 28, 2006

CUPS.org User: mike

Fixed in Subversion repository.

@michaelrsweet

This comment has been minimized.

Collaborator

michaelrsweet commented Mar 28, 2006

"str1515.patch":

Index: lpq.c

--- lpq.c (revision 5344)
+++ lpq.c (working copy)
@@ -49,6 +49,7 @@

  • Local functions...
    */

+static http_t connect_server(const char *, http_t *);
static int show_jobs(const char *, http_t *, const char *,
const char *, const int, const int);
static void show_printer(const char *, http_t *, const char *);
@@ -76,35 +77,23 @@
int num_dests; /
Number of destinations /
cups_dest_t *dests; /
Destinations /
cups_lang_t *language; /
Language */
-#ifdef HAVE_SSL

  • http_encryption_t encryption; /* Encryption? /
    -#endif /
    HAVE_SSL */
  • language = cupsLangDefault();
  • /*
  • * Connect to the scheduler...
  • */
  • if ((http = httpConnectEncrypt(cupsServer(), ippPort(),
  •                             cupsEncryption())) == NULL)
    
  • {
  • _cupsLangPrintf(stderr, _("%s: Unable to contact server!\n"), argv[0]);
  • return (1);

- }

/*

  • Check for command-line options...
    */
  • http = NULL;
    dest = NULL;
    user = NULL;
    id = 0;
    interval = 0;
    longstatus = 0;
    all = 0;
  • num_dests = cupsGetDests(&dests);
  • language = cupsLangDefault();
  • num_dests = 0;

for (i = 1; i < argc; i ++)
if (argv[i][0] == '+')
@@ -115,10 +104,10 @@
{
case 'E' : /* Encrypt */
#ifdef HAVE_SSL

  •   encryption = HTTP_ENCRYPT_REQUIRED;
    
  •   cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
    
    if (http)
    
  •     httpEncryption(http, encryption);
    
  •     httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
    

    #else
    _cupsLangPrintf(stderr,
    _("%s: Sorry, no encryption support compiled in!\n"),
    @@ -166,6 +155,11 @@
    if ((instance = strchr(dest, '/')) != NULL)
    *instance++ = '\0';

  •        http = connect_server(argv[0], http);
    
  •        if (num_dests == 0)
    
  •          num_dests = cupsGetDests2(http, &dests);
    
    •    if (cupsGetDest(dest, instance, num_dests, dests) == NULL)
      
      {
      if (instance)
      @@ -186,8 +180,11 @@
      break;
     case 'h' : /* Connect to host */
    
  •   if (http != NULL)
    
  •   if (http)
    
  •   {
      httpClose(http);
    
  •     http = NULL;
    
  •   }
    
    if (argv[i][2] != '\0')
           cupsSetServer(argv[i] + 2);
    

    @@ -225,8 +222,13 @@
    else
    user = argv[i];

  • http = connect_server(argv[0], http);

if (dest == NULL && !all)
{

  • if (num_dests == 0)

  •  num_dests = cupsGetDests2(http, &dests);
    

    for (i = 0; i < num_dests; i ++)
    if (dests[i].is_default)
    dest = dests[i].name;
    @@ -295,6 +297,30 @@

    /*

  • * 'connect_server()' - Connect to the server as necessary...

  • /
    +
    +static http_t * /
    O - New HTTP connection /
    +connect_server(const char *command, /
    I - Command name */

  •           http_t     _http)   /_ I - Current HTTP connection */
    

    +{

  • if (!http)

  • {

  • http = httpConnectEncrypt(cupsServer(), ippPort(),

  •                     cupsEncryption());
    
  • if (http == NULL)

  • {

  •  _cupsLangPrintf(stderr, _("%s: Unable to connect to server\n"), command);
    
  •  exit(1);
    
  • }

  • }

  • return (http);
    +}

+/*

  • 'show_jobs()' - Show jobs.
    */

@michaelrsweet michaelrsweet added this to the Stable milestone Mar 17, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment