Fri, 24 Sep 2010 22:42:14 -0700
6891766: Vulnerabilities in use of reflection in CORBA
Reviewed-by: hawtin
1 /*
2 * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 package org.omg.CORBA;
27 import org.omg.CORBA.portable.*;
30 /**
31 * <P>Used as a base class for implementation of a local IDL interface in the
32 * Java language mapping. It is a class which implements all the operations
33 * in the <tt>org.omg.CORBA.Object</tt> interface.
34 * <P>Local interfaces are implemented by using CORBA::LocalObject
35 * to provide implementations of <code>Object</code> pseudo
36 * operations and any other ORB-specific support mechanisms that are
37 * appropriate for such objects. Object implementation techniques are
38 * inherently language-mapping specific. Therefore, the
39 * <code>LocalObject</code> type is not defined in IDL, but is specified
40 * in each language mapping.
41 * <P>Methods that do not apply to local objects throw
42 * an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with the message,
43 * "This is a locally contrained object." Attempting to use a
44 * <TT>LocalObject</TT> to create a DII request results in NO_IMPLEMENT
45 * system exception. Attempting to marshal or stringify a
46 * <TT>LocalObject</TT> results in a MARSHAL system exception. Narrowing
47 * and widening references to <TT>LocalObjects</TT> must work as for regular
48 * object references.
49 * <P><code>LocalObject</code> is to be used as the base class of locally
50 * constrained objects, such as those in the PortableServer module.
51 * The specification here is based on the CORBA Components
52 * Volume I - orbos/99-07-01<P>
53 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
54 * comments for unimplemented features</a>
55 */
57 public class LocalObject implements org.omg.CORBA.Object
58 {
59 private static String reason = "This is a locally constrained object.";
61 /**
62 * Constructs a default <code>LocalObject</code> instance.
63 */
64 public LocalObject() {}
66 /**
67 * <P>Determines whether the two object references are equivalent,
68 * so far as the ORB can easily determine. Two object references are equivalent
69 * if they are identical. Two distinct object references which in fact refer to
70 * the same object are also equivalent. However, ORBs are not required
71 * to attempt determination of whether two distinct object references
72 * refer to the same object, since such determination could be impractically
73 * expensive.
74 * <P>Default implementation of the org.omg.CORBA.Object method. <P>
75 *
76 * @param that the object reference with which to check for equivalence
77 * @return <code>true</code> if this object reference is known to be
78 * equivalent to the given object reference.
79 * Note that <code>false</code> indicates only that the two
80 * object references are distinct, not necessarily that
81 * they reference distinct objects.
82 */
83 public boolean _is_equivalent(org.omg.CORBA.Object that) {
84 return equals(that) ;
85 }
87 /**
88 * Always returns <code>false</code>.
89 * This method is the default implementation of the
90 * <code>org.omg.CORBA.Object</code> method.<P>
91 *
92 * @return <code>false</code>
93 */
94 public boolean _non_existent() {
95 return false;
96 }
98 /**
99 * Returns a hash value that is consistent for the
100 * lifetime of the object, using the given number as the maximum.
101 * This method is the default implementation of the
102 * <code>org.omg.CORBA.Object</code> method.<P>
103 * @param maximum an <code>int</code> identifying maximum value of
104 * the hashcode
105 * @return this instance's hashcode
106 */
107 public int _hash(int maximum) {
108 return hashCode() ;
109 }
111 /**
112 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
113 * the message "This is a locally constrained object." This method
114 * does not apply to local objects and is therefore not implemented.
115 * This method is the default implementation of the
116 * <code>org.omg.CORBA.Object</code> method.<P>
117 *
118 * @param repository_id a <code>String</code>
119 * @return NO_IMPLEMENT because this is a locally constrained object
120 * and this method does not apply to local objects
121 * @exception NO_IMPLEMENT because this is a locally constrained object
122 * and this method does not apply to local objects
123 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
124 * comments for unimplemented features</a>
125 */
126 public boolean _is_a(String repository_id) {
127 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
128 }
130 /**
131 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
132 * the message "This is a locally constrained object."
133 * This method is the default implementation of the
134 * <code>org.omg.CORBA.Object</code> method.<P>
135 * @return a duplicate of this <code>LocalObject</code> instance.
136 * @exception NO_IMPLEMENT
137 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
138 * comments for unimplemented features</a>
139 */
140 public org.omg.CORBA.Object _duplicate() {
141 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
142 }
144 /**
145 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
146 * the message "This is a locally constrained object."
147 * This method is the default implementation of the
148 * <code>org.omg.CORBA.Object</code> method.<P>
149 * @exception NO_IMPLEMENT
150 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
151 * comments for unimplemented features</a>
152 */
153 public void _release() {
154 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
155 }
157 /**
158 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
159 * the message "This is a locally constrained object."
160 * This method is the default implementation of the
161 * <code>org.omg.CORBA.Object</code> method.<P>
162 *
163 * @param operation a <code>String</code> giving the name of an operation
164 * to be performed by the request that is returned
165 * @return a <code>Request</code> object with the given operation
166 * @exception NO_IMPLEMENT
167 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
168 * comments for unimplemented features</a>
169 */
170 public Request _request(String operation) {
171 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
172 }
174 /**
175 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
176 * the message "This is a locally constrained object."
177 * This method is the default implementation of the
178 * <code>org.omg.CORBA.Object</code> method.<P>
179 *
180 * @param ctx a <code>Context</code> object containing
181 * a list of properties
182 * @param operation the <code>String</code> representing the name of the
183 * method to be invoked
184 * @param arg_list an <code>NVList</code> containing the actual arguments
185 * to the method being invoked
186 * @param result a <code>NamedValue</code> object to serve as a
187 * container for the method's return value
188 * @return a new <code>Request</code> object initialized with the given
189 * arguments
190 * @exception NO_IMPLEMENT
191 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
192 * comments for unimplemented features</a>
193 */
194 public Request _create_request(Context ctx,
195 String operation,
196 NVList arg_list,
197 NamedValue result) {
198 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
199 }
201 /**
202 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
203 * the message "This is a locally constrained object."
204 * This method is the default implementation of the
205 * <code>org.omg.CORBA.Object</code> method.<P>
206 *
207 * @param ctx a <code>Context</code> object containing
208 * a list of properties
209 * @param operation the name of the method to be invoked
210 * @param arg_list an <code>NVList</code> containing the actual arguments
211 * to the method being invoked
212 * @param result a <code>NamedValue</code> object to serve as a
213 * container for the method's return value
214 * @param exceptions an <code>ExceptionList</code> object containing a
215 * list of possible exceptions the method can throw
216 * @param contexts a <code>ContextList</code> object containing a list of
217 * context strings that need to be resolved and sent
218 * with the
219 * <code>Request</code> instance
220 * @return the new <code>Request</code> object initialized with the given
221 * arguments
222 * @exception NO_IMPLEMENT
223 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
224 * comments for unimplemented features</a>
225 */
226 public Request _create_request(Context ctx,
227 String operation,
228 NVList arg_list,
229 NamedValue result,
230 ExceptionList exceptions,
231 ContextList contexts) {
232 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
233 }
235 /**
236 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
237 * the message "This is a locally constrained object." This method
238 * does not apply to local objects and is therefore not implemented.
239 * This method is the default implementation of the
240 * <code>org.omg.CORBA.Object</code> method.<P>
241 * @return NO_IMPLEMENT because this is a locally constrained object
242 * and this method does not apply to local objects
243 * @exception NO_IMPLEMENT because this is a locally constrained object
244 * and this method does not apply to local objects
245 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
246 * comments for unimplemented features</a>
247 */
248 public org.omg.CORBA.Object _get_interface()
249 {
250 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
251 }
253 /**
254 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
255 * the message "This is a locally constrained object."
256 * This method is the default implementation of the
257 * <code>org.omg.CORBA.Object</code> method.<P>
258 * @exception NO_IMPLEMENT
259 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
260 * comments for unimplemented features</a>
261 */
262 public org.omg.CORBA.Object _get_interface_def()
263 {
264 // First try to call the delegate implementation class's
265 // "Object get_interface_def(..)" method (will work for JDK1.2
266 // ORBs).
267 // Else call the delegate implementation class's
268 // "InterfaceDef get_interface(..)" method using reflection
269 // (will work for pre-JDK1.2 ORBs).
271 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
272 }
274 /**
275 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
276 * the message "This is a locally constrained object."
277 * This method is the default implementation of the
278 * <code>org.omg.CORBA.Object</code> method.<P>
279 * @return the ORB instance that created the Delegate contained in this
280 * <code>ObjectImpl</code>
281 * @exception NO_IMPLEMENT
282 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
283 * comments for unimplemented features</a>
284 */
285 public org.omg.CORBA.ORB _orb() {
286 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
287 }
289 /**
290 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
291 * the message "This is a locally constrained object." This method
292 * does not apply to local objects and is therefore not implemented.
293 * This method is the default implementation of the
294 * <code>org.omg.CORBA.Object</code> method.<P>
295 * @param policy_type an <code>int</code>
296 * @return NO_IMPLEMENT because this is a locally constrained object
297 * and this method does not apply to local objects
298 * @exception NO_IMPLEMENT because this is a locally constrained object
299 * and this method does not apply to local objects
300 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
301 * comments for unimplemented features</a>
302 */
303 public org.omg.CORBA.Policy _get_policy(int policy_type) {
304 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
305 }
308 /**
309 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
310 * the message "This is a locally constrained object." This method
311 * does not apply to local objects and is therefore not implemented.
312 * This method is the default implementation of the
313 * <code>org.omg.CORBA.Object</code> method.<P>
314 * @exception NO_IMPLEMENT
315 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
316 * comments for unimplemented features</a>
317 */
318 public org.omg.CORBA.DomainManager[] _get_domain_managers() {
319 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
320 }
322 /**
323 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
324 * the message "This is a locally constrained object." This method
325 * does not apply to local objects and is therefore not implemented.
326 * This method is the default implementation of the
327 * <code>org.omg.CORBA.Object</code> method.
328 *
329 * @param policies an array
330 * @param set_add a flag
331 * @return NO_IMPLEMENT because this is a locally constrained object
332 * and this method does not apply to local objects
333 * @exception NO_IMPLEMENT because this is a locally constrained object
334 * and this method does not apply to local objects
335 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
336 * comments for unimplemented features</a>
337 */
338 public org.omg.CORBA.Object
339 _set_policy_override(org.omg.CORBA.Policy[] policies,
340 org.omg.CORBA.SetOverrideType set_add) {
341 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
342 }
345 /**
346 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
347 * the message "This is a locally constrained object."
348 * This method is the default implementation of the
349 * <code>org.omg.CORBA.Object</code> method.<P>
350 * Returns <code>true</code> for this <code>LocalObject</code> instance.<P>
351 * @return <code>true</code> always
352 * @exception NO_IMPLEMENT
353 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
354 * comments for unimplemented features</a>
355 */
356 public boolean _is_local() {
357 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
358 }
360 /**
361 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
362 * the message "This is a locally constrained object."
363 * This method is the default implementation of the
364 * <code>org.omg.CORBA.Object</code> method.<P>
365 * @param operation a <code>String</code> indicating which operation
366 * to preinvoke
367 * @param expectedType the class of the type of operation mentioned above
368 * @return NO_IMPLEMENT because this is a locally constrained object
369 * and this method does not apply to local objects
370 * @exception NO_IMPLEMENT because this is a locally constrained object
371 * and this method does not apply to local object
372 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
373 * comments for unimplemented features</a>
374 */
375 public ServantObject _servant_preinvoke(String operation,
376 Class expectedType) {
377 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
378 }
380 /**
381 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
382 * the message "This is a locally constrained object."
383 * This method is the default implementation of the
384 * <code>org.omg.CORBA.Object</code> method.<P>
385 * @param servant the servant object on which to post-invoke
386 * @exception NO_IMPLEMENT
387 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
388 * comments for unimplemented features</a>
389 */
390 public void _servant_postinvoke(ServantObject servant) {
391 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
392 }
394 /*
395 * The following methods were added by orbos/98-04-03: Java to IDL
396 * Mapping. These are used by RMI over IIOP.
397 */
399 /**
400 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
401 * the message "This is a locally constrained object."
402 * This method is the default implementation of the
403 * <code>org.omg.CORBA.Object</code> method.
404 * <P>Called by a stub to obtain an OutputStream for
405 * marshaling arguments. The stub must supply the operation name,
406 * and indicate if a response is expected (i.e is this a oneway
407 * call).<P>
408 * @param operation the name of the operation being requested
409 * @param responseExpected <code>true</code> if a response is expected,
410 * <code>false</code> if it is a one-way call
411 * @return NO_IMPLEMENT because this is a locally constrained object
412 * and this method does not apply to local objects
413 * @exception NO_IMPLEMENT because this is a locally constrained object
414 * and this method does not apply to local objects
415 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
416 * comments for unimplemented features</a>
417 */
418 public OutputStream _request(String operation,
419 boolean responseExpected) {
420 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
421 }
423 /**
424 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
425 * the message "This is a locally constrained object."
426 * This method is the default implementation of the
427 * <code>org.omg.CORBA.Object</code> method.
428 * <P>Called to invoke an operation. The stub provides an
429 * <code>OutputStream</code> that was previously returned by a
430 * <code>_request()</code>
431 * call. <code>_invoke</code> returns an <code>InputStream</code> which
432 * contains the
433 * marshaled reply. If an exception occurs, <code>_invoke</code> may throw an
434 * <code>ApplicationException</code> object which contains an
435 * <code>InputStream</code> from
436 * which the user exception state may be unmarshaled.<P>
437 * @param output the <code>OutputStream</code> to invoke
438 * @return NO_IMPLEMENT because this is a locally constrained object
439 * and this method does not apply to local objects
440 * @throws ApplicationException If an exception occurs,
441 * <code>_invoke</code> may throw an
442 * <code>ApplicationException</code> object which contains
443 * an <code>InputStream</code> from
444 * which the user exception state may be unmarshaled.
445 * @throws RemarshalException If an exception occurs,
446 * <code>_invoke</code> may throw an
447 * <code>ApplicationException</code> object which contains
448 * an <code>InputStream</code> from
449 * which the user exception state may be unmarshaled.
450 * @exception NO_IMPLEMENT because this is a locally constrained object
451 * and this method does not apply to local objects
452 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
453 * comments for unimplemented features</a>
454 */
455 public InputStream _invoke(OutputStream output)
456 throws ApplicationException, RemarshalException
457 {
458 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
459 }
461 /**
462 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
463 * the message "This is a locally constrained object."
464 * This method is the default implementation of the
465 * <code>org.omg.CORBA.Object</code> method.
466 * <P>May optionally be called by a stub to release a
467 * reply stream back to the ORB when the unmarshaling has
468 * completed. The stub passes the <code>InputStream</code> returned by
469 * <code>_invoke()</code> or
470 * <code>ApplicationException.getInputStream()</code>.
471 * A null
472 * value may also be passed to <code>_releaseReply</code>, in which case the
473 * method is a no-op.<P>
474 * @param input the reply stream back to the ORB or null
475 * @exception NO_IMPLEMENT
476 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
477 * comments for unimplemented features</a>
478 */
479 public void _releaseReply(InputStream input) {
480 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
481 }
483 /**
484 * Throws an <code>org.omg.CORBA.NO_IMPLEMENT</code> exception with
485 * the message "This is a locally constrained object." This method
486 * does not apply to local objects and is therefore not implemented.
487 * This method is the default implementation of the
488 * <code>org.omg.CORBA.Object</code> method.<P>
489 * @return NO_IMPLEMENT because this is a locally constrained object
490 * and this method does not apply to local objects
491 * @exception NO_IMPLEMENT because this is a locally constrained object
492 * and this method does not apply to local objects
493 * @see <a href="package-summary.html#unimpl"><code>CORBA</code> package
494 * comments for unimplemented features</a>
495 */
497 public boolean validate_connection() {
498 throw new org.omg.CORBA.NO_IMPLEMENT(reason);
499 }
500 }