Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: native_client_sdk/src/libraries/nacl_io/passthroughfs/passthrough_fs.cc

Issue 1062463004: [NaCl SDK] nacl_io: Fix use-after-free bug in html5fs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "nacl_io/passthroughfs/passthrough_fs.h" 5 #include "nacl_io/passthroughfs/passthrough_fs.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 8
9 #include "nacl_io/kernel_handle.h" 9 #include "nacl_io/kernel_handle.h"
10 #include "nacl_io/kernel_wrap_real.h" 10 #include "nacl_io/kernel_wrap_real.h"
11 #include "nacl_io/passthroughfs/real_node.h" 11 #include "nacl_io/passthroughfs/real_node.h"
12 12
13 namespace nacl_io { 13 namespace nacl_io {
14 14
15 PassthroughFs::PassthroughFs() { 15 PassthroughFs::PassthroughFs() {
16 } 16 }
17 17
18 Error PassthroughFs::Init(const FsInitArgs& args) { 18 Error PassthroughFs::Init(const FsInitArgs& args) {
19 return Filesystem::Init(args); 19 return Filesystem::Init(args);
20 } 20 }
21 21
22 void PassthroughFs::Destroy() { 22 void PassthroughFs::Destroy() {
23 } 23 }
24 24
25 Error PassthroughFs::OpenWithMode(const Path& path, int open_flags, 25 Error PassthroughFs::OpenWithMode(const Path& path, int open_flags,
26 mode_t mode, ScopedNode* out_node) { 26 mode_t mode, ScopedNode* out_node) {
27 out_node->reset(NULL); 27 out_node->reset(NULL);
28 int real_fd; 28 int real_fd;
29 int error = _real_open(path.Join().c_str(), open_flags, mode, &real_fd); 29 std::string path_str = path.Join();
30 int error = _real_open(path_str.c_str(), open_flags, mode, &real_fd);
30 if (error) 31 if (error)
31 return error; 32 return error;
32 33
33 out_node->reset(new RealNode(this, real_fd, true)); 34 out_node->reset(new RealNode(this, real_fd, true));
34 return 0; 35 return 0;
35 } 36 }
36 37
37 Error PassthroughFs::OpenResource(const Path& path, ScopedNode* out_node) { 38 Error PassthroughFs::OpenResource(const Path& path, ScopedNode* out_node) {
38 int real_fd; 39 int real_fd;
39 out_node->reset(NULL); 40 out_node->reset(NULL);
40 int error = _real_open_resource(path.Join().c_str(), &real_fd); 41 std::string path_str = path.Join();
42 int error = _real_open_resource(path_str.c_str(), &real_fd);
41 if (error) 43 if (error)
42 return error; 44 return error;
43 45
44 out_node->reset(new RealNode(this, real_fd)); 46 out_node->reset(new RealNode(this, real_fd));
45 return 0; 47 return 0;
46 } 48 }
47 49
48 Error PassthroughFs::Unlink(const Path& path) { 50 Error PassthroughFs::Unlink(const Path& path) {
49 // Not implemented by NaCl. 51 // Not implemented by NaCl.
50 return ENOSYS; 52 return ENOSYS;
51 } 53 }
52 54
53 Error PassthroughFs::Mkdir(const Path& path, int perm) { 55 Error PassthroughFs::Mkdir(const Path& path, int perm) {
54 return _real_mkdir(path.Join().c_str(), perm); 56 std::string path_str = path.Join();
57 return _real_mkdir(path_str.c_str(), perm);
55 } 58 }
56 59
57 Error PassthroughFs::Rmdir(const Path& path) { 60 Error PassthroughFs::Rmdir(const Path& path) {
58 return _real_rmdir(path.Join().c_str()); 61 std::string path_str = path.Join();
62 return _real_rmdir(path_str.c_str());
59 } 63 }
60 64
61 Error PassthroughFs::Remove(const Path& path) { 65 Error PassthroughFs::Remove(const Path& path) {
62 // Not implemented by NaCl. 66 // Not implemented by NaCl.
63 return ENOSYS; 67 return ENOSYS;
64 } 68 }
65 69
66 Error PassthroughFs::Rename(const Path& path, const Path& newpath) { 70 Error PassthroughFs::Rename(const Path& path, const Path& newpath) {
67 // Not implemented by NaCl. 71 // Not implemented by NaCl.
68 return ENOSYS; 72 return ENOSYS;
69 } 73 }
70 74
71 } // namespace nacl_io 75 } // namespace nacl_io
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698