toolkit/crashreporter/google-breakpad/src/common/mac/macho_id.h

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 // Copyright (c) 2006, Google Inc.
     2 // All rights reserved.
     3 //
     4 // Redistribution and use in source and binary forms, with or without
     5 // modification, are permitted provided that the following conditions are
     6 // met:
     7 //
     8 //     * Redistributions of source code must retain the above copyright
     9 // notice, this list of conditions and the following disclaimer.
    10 //     * Redistributions in binary form must reproduce the above
    11 // copyright notice, this list of conditions and the following disclaimer
    12 // in the documentation and/or other materials provided with the
    13 // distribution.
    14 //     * Neither the name of Google Inc. nor the names of its
    15 // contributors may be used to endorse or promote products derived from
    16 // this software without specific prior written permission.
    17 //
    18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    30 // macho_id.h: Functions to gather identifying information from a macho file
    31 //
    32 // Author: Dan Waylonis
    34 #ifndef COMMON_MAC_MACHO_ID_H__
    35 #define COMMON_MAC_MACHO_ID_H__
    37 #include <limits.h>
    38 #include <mach/machine.h>
    39 #include <mach-o/loader.h>
    41 #include "common/mac/macho_walker.h"
    42 #include "common/md5.h"
    44 namespace MacFileUtilities {
    46 class MachoID {
    47  public:
    48   MachoID(const char *path);
    49   MachoID(const char *path, void *memory, size_t size);
    50   ~MachoID();
    52   // For the given |cpu_type| and |cpu_subtype|, return a UUID from the LC_UUID
    53   // command.
    54   // Return false if there isn't a LC_UUID command.
    55   bool UUIDCommand(cpu_type_t cpu_type,
    56                    cpu_subtype_t cpu_subtype,
    57                    unsigned char identifier[16]);
    59   // For the given |cpu_type| and |cpu_subtype|, return a UUID from the
    60   // LC_ID_DYLIB command.
    61   // Return false if there isn't a LC_ID_DYLIB command.
    62   bool IDCommand(cpu_type_t cpu_type,
    63                  cpu_subtype_t cpu_subtype,
    64                  unsigned char identifier[16]);
    66   // For the given |cpu_type| and |cpu_subtype|, return the Adler32 CRC for the
    67   // mach-o data segment(s).
    68   // Return 0 on error (e.g., if the file is not a mach-o file)
    69   uint32_t Adler32(cpu_type_t cpu_type,
    70                    cpu_subtype_t cpu_subtype);
    72   // For the given |cpu_type|, and |cpu_subtype| return the MD5 for the mach-o
    73   // data segment(s).
    74   // Return true on success, false otherwise
    75   bool MD5(cpu_type_t cpu_type,
    76            cpu_subtype_t cpu_subtype,
    77            unsigned char identifier[16]);
    79  private:
    80   // Signature of class member function to be called with data read from file
    81   typedef void (MachoID::*UpdateFunction)(unsigned char *bytes, size_t size);
    83   // Update the CRC value by examining |size| |bytes| and applying the algorithm
    84   // to each byte.
    85   void UpdateCRC(unsigned char *bytes, size_t size);
    87   // Update the MD5 value by examining |size| |bytes| and applying the algorithm
    88   // to each byte.
    89   void UpdateMD5(unsigned char *bytes, size_t size);
    91   // Bottleneck for update routines
    92   void Update(MachoWalker *walker, off_t offset, size_t size);
    94   // Factory for the MachoWalker
    95   bool WalkHeader(cpu_type_t cpu_type, cpu_subtype_t cpu_subtype,
    96                   MachoWalker::LoadCommandCallback callback, void *context);
    98   // The callback from the MachoWalker for CRC and MD5
    99   static bool WalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
   100                        bool swap, void *context);
   102   // The callback from the MachoWalker for LC_UUID
   103   static bool UUIDWalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
   104                            bool swap, void *context);
   106   // The callback from the MachoWalker for LC_ID_DYLIB
   107   static bool IDWalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
   108                          bool swap, void *context);
   110   // File path
   111   char path_[PATH_MAX];
   113   // Memory region to read from
   114   void *memory_;
   116   // Size of the memory region
   117   size_t memory_size_;
   119   // The current crc value
   120   uint32_t crc_;
   122   // The MD5 context
   123   google_breakpad::MD5Context md5_context_;
   125   // The current update to call from the Update callback
   126   UpdateFunction update_function_;
   127 };
   129 }  // namespace MacFileUtilities
   131 #endif  // COMMON_MAC_MACHO_ID_H__

mercurial