blob: bdbe4e3cf2ccf0f453a5733538d40e247f90cb53 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
// -*- C++ -*-
#ifndef ACE_CHECKED_ITERATOR_H
#define ACE_CHECKED_ITERATOR_H
/**
* @file checked_iterator.h
*
* @brief Checked iterator factory function.
*
* Some compilers (e.g. MSVC++ >= 8) issue security related
* diagnostics if algorithms such as std::copy() are used in an unsafe
* way. Normally this isn't an issue if STL container iterators are
* used in conjuction with the standard algorithms. However, in cases
* where application-specific iterators are use with standard
* algorithms that could potentially overrun a buffer, extra care must
* be taken to prevent such an overrun. If supported, checked
* iterators can be used to address the potential destination buffer
* overrun.
*
* This header provides function templates that generate the
* appropriate checked iterator. In cases where checked iterators are
* not supported, the pointer passed to the function is returned
* instead.
*
* @internal The functions and types in this header are meant for
* internal use. They may change at any point between
* releases.
*
* @author Ossama Othman
*/
# if defined (_MSC_VER) && (!defined (_STLPORT_VERSION))
// Checked iterators are currently only supported in MSVC++
# include <iterator>
# endif /* _MSC_VER && !_STLPORT_VERSION */
# if defined (_MSC_VER) && (!defined (_STLPORT_VERSION))
template <typename PTR>
stdext::checked_array_iterator<PTR>
ACE_make_checked_array_iterator (PTR buf, size_t len)
{
return stdext::checked_array_iterator<PTR> (buf, len);
}
# else
template <typename PTR>
PTR
ACE_make_checked_array_iterator (PTR buf, size_t /* len */)
{
// Checked iterators are unsupported. Just return the pointer to
// the buffer itself.
return buf;
}
# endif /* _MSC_VER && !_STLPORT_VERSION */
#endif /* ACE_CHECKED_ITERATOR_H */
|