-
Notifications
You must be signed in to change notification settings - Fork 58
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
segmentation fault during calls to cups gem v0.1.10 #21
Comments
Response from Ruby/Eric Wong: static VALUE cups_get_device_uri(VALUE self, VALUE printer)
{
if (!printer_exists(printer))
{
rb_raise(rb_eRuntimeError, "The printer or destination doesn't exist!");
}
VALUE options_list;
http_t *http;
ipp_t *request;
ipp_t *response;
ipp_attribute_t *attr;
char uri[1024];
char *location;
char *name = RSTRING_PTR(printer);
~~~~~~~~~~~~~~~~~~~~~~
request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, "localhost", 0, "/printers/%s", name); You also need to add a GC guard for VALUE where you got name' from RB_GC_GUARD(printer); Nowadays with better optimizing compilers, the `volatile' type qualifier See doc/extension.rdoc in the latest Ruby trunk or README.EXT in the And feel free to ask for clarification here on the ruby-core ML. cups.c (14.2 KB) Lots of similar problems in cups.c too. The same pattern
and the addition of RB_GC_GUARD calls after the last access to the underlying pointer. There may be other problems in the code, too, but these are the ones |
Here's a one-liner to reproduce the error, assuming you have at least two registered CUPS printers (mine are: "laserjet_1102w", "lp_null") Cups.show_destinations.map {|cn| Cups.device_uri_for( cn ) } and both of the following also reproduces the error: ["laserjet_1102w"].each {|cn| Cups.device_uri_for( cn ) }
1.times {|n| Cups.device_uri_for( "laserjet_1102w" ) } |
This is reproducible; originally reported as bug to Ruby 2.2.1 ( https://bugs.ruby-lang.org/issues/11306 ). But their recommendation is for changes to cups.c (shown below as the first comment to this issue). This may or may not be related to issue #10 .
the following works okay:
the following fails (the order is not important; the second call always fails with abort):
where
detailed core dump at: https://gist.github.com/dsaronin/52e1e8aa97b61210c478
The text was updated successfully, but these errors were encountered: