caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Romain Bardou <romain.bardou@inria.fr>
To: caml-list@inria.fr
Subject: Re: [Caml-list] Marshall.from_channel and segmentation fault
Date: Fri, 12 Jun 2015 09:39:39 +0200	[thread overview]
Message-ID: <557A8CBB.5050306@inria.fr> (raw)
In-Reply-To: <20150612052738.GA3684@pllab.is.ocha.ac.jp>

On 12/06/2015 07:27, Kenichi Asai wrote:
> The OCaml manual for the Marshall module says:
>
>> (Marshal.from_channel chan : type).  Anything can happen at run-time
>> if the object in the file does not belong to the given type.
>
> and this "Anything" contains segmentation fault.  Is it difficult to
> avoid this segmentation fault and, e.g., raise an exception instead?
>
> Sincerely,
>

You have to check that you will not dereference invalid pointers. 
Basically you need to type-check the value at runtime before using it. 
If you have a runtime representation of the type of your value, you may 
be able to do so using Obj. But if you have a runtime representation of 
the type, Marshal suddenly becomes less interesting as you can use this 
representation to guide serialization anyway.

Because of this, Marshal is mostly used when one knows through other 
means that only values of the right type are deserialized. This means 
that Marshal should not be used for network applications where the 
remote peer cannot be trusted to always send values of the right type. 
An attacker could send an ill-formed value to crash the server, for 
instance. Or, the remote peer may simply not be up-to-date and use other 
types for its values.

Marshal is better suited to saving data locally. It will still fail if 
one tries to use values from another application or another version of 
the same application with incompatible types. In other words it will not 
be backward compatible when types change, so Marshal is better suited 
for temporary files. For instance, .cmi files are marshaled values, if 
I'm not mistaken.

To sum up: yes, it is difficult.

Cheers,

-- 
Romain Bardou

  reply	other threads:[~2015-06-12  7:40 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-12  5:27 Kenichi Asai
2015-06-12  7:39 ` Romain Bardou [this message]
2015-06-12  8:26   ` Kenichi Asai
2015-06-12  8:55     ` Romain Bardou
2015-06-12  8:41   ` Francois Berenger
2015-06-12  8:38 ` Francois Berenger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=557A8CBB.5050306@inria.fr \
    --to=romain.bardou@inria.fr \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).