Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A virtual machine designed for executing programs written in Hack and PHP.
C++ PHP Hack C OCaml CMake Other

finalize Closure methods in the IDL

Summary: user-supplied code is not supposed to be extending Closure.

one way to trick the runtime into allowing "class X extends Closure" is to override the constructor to prevent the parent (`c_Closure::t___construct()`) from erroring out.

this creates two ways of crashing:
- by overriding the constructor, a Closure object can be created without the `CreateCl` bytecode being executed, thus c_Closure::init() is never run. `c_Closure->m_func` is `nullptr`. `var_dump($closure_obj)` enters `c_Closure::t__debuginfo()` and null is dereferenced. stack trace from such a crash P19780626.
- hhbbc expects that classes that extend Closure have one and only one method named __invoke. stack traces from this crash P19780671 and P19780675

this diff does not directly address the hhbbc assertions.

Reviewed By: @markw65

Differential Revision: D1949712
latest commit 024fbf90e5
@billf billf authored hhvm-bot committed

README.md

HHVM

HHVM page | Hacklang page | General group | Dev group | Twitter

HHVM (aka the HipHop Virtual Machine) is an open-source virtual machine designed for executing programs written in Hack and PHP. HHVM uses a just-in-time compilation approach to achieve superior performance while maintaining the flexibility that PHP developers are accustomed to. To date, HHVM (and its predecessor HPHPc before it) has realized over a 9x increase in web request throughput and over a 5x reduction in memory consumption for Facebook compared with the PHP 5.2 engine + APC.

HHVM should be used together with a FastCGI-based webserver like nginx or apache.

FAQ

Our FAQ has answers to many common questions about HHVM, from general questions to questions geared towards those that want to use or contribute to HHVM.

Installing

If you're new, try our getting started overview.

You can install a prebuilt package or compile from source.

Running

You can run standalone programs just by passing them to hhvm: hhvm my_script.php.

If you want to host a website:

  • Install your favorite webserver
  • Install our package
  • Start your webserver
  • Run sudo /etc/init.d/hhvm start
  • Visit your site at http://.../index.php

Our getting started overview provides a slightly more detailed introduction as well as links to more information.

Contributing

We'd love to have your help in making HHVM better. If you're interested, please read our guide to contributing.

License

HHVM is licensed under the PHP and Zend licenses except as otherwise noted.

The Hack typechecker (hphp/hack) is licensed under the BSD license (hphp/hack/LICENSE) with an additional grant of patent rights (hphp/hack/PATENTS) except as otherwise noted.

Reporting Crashes

See Reporting Crashes for helpful tips on how to report crashes in an actionable manner.

Something went wrong with that request. Please try again.