Commit Graph

33 Commits

Author SHA1 Message Date
jhb
c26ba28f12 MFC 287448:
Add more mmap tests related to character devices.
- Add cdev-related tests for bad args.
- Add two simple tests cases for mapping /dev/zero that test for
  MAP_ANON-like behavior.
2015-10-01 22:19:41 +00:00
jhb
40af7e45ad MFC 286370:
Add various tests to ensure that invalid arguments passed to mmap()
trigger failures.

Note: most of the tests that should provoke an EINVAL error do not
pass on stable/10 as stable/10 does not have the changes that added
more strict parameter checking to mmap().  Those changes will not be
merged to stable/10, so I have disabled them via #if 0 with a comment
explaining why.
2015-10-01 22:17:27 +00:00
jhb
875b574b15 MFC 286369:
Convert the map_at_zero test case to ATF.  In particular, this will
facilitate adding more mmap() tests.
2015-10-01 22:08:16 +00:00
jhb
4a069f68d7 MFC 283281,283282,283562,283647,283836,284000,286158:
Various fixes to orphan handling which also fix issues with following
forks.

283281:
Always set p_oppid when attaching to an existing process via procfs
tracing.  This matches the behavior of ptrace(PT_ATTACH).  Also,
the procfs detach request assumes p_oppid is always set.

283282:
Only reparent a traced process to its old parent if the tracing process is
not the old parent. Otherwise, proc_reap() will leave the zombie in place
resulting in the process' status being returned twice to its parent.

Add test cases for PT_TRACE_ME and PT_ATTACH which are fixed by
this change.

283562:
Do not allow a process to reap an orphan (a child currently being
traced by another process such as a debugger). The parent process does
need to check for matching orphan pids to avoid returning ECHILD if an
orphan has exited, but it should not return the exited status for the
child until after the debugger has detached from the orphan process
either explicitly or implicitly via wait().

Add two tests for for this case: one where the debugger is the direct
child (thus the parent has a non-empty children list) and one where
the debugger is not a direct child (so the only "child" of the parent
is the orphan).

283647:
Tweak the description of when waitpid() doesn't return any status for a
non-blocking wait to avoid the word "empty".

283836:
Consistently only use one end of the pipe in the parent and debugger
processes and do not rely on EOF due to a close() in the debugger.

284000:
Add a CHILD_REQUIRE macro similar to ATF_REQUIRE for use in child processes
of the main test process.

286158:
Clear P_TRACED before reparenting a detached process back to its
original parent. Otherwise the debugee will be set as an orphan of
the debugger.

Add tests for tracing forks via PT_FOLLOW_FORK.
2015-09-09 23:39:30 +00:00
rodrigc
b07232430c Merge r285891:
Pass unsigned long argument to ioctl().

Eliminates "ioctl sign-extension" warnings.

PR:             200896
2015-08-11 01:51:38 +00:00
ngie
f0e277f517 MFC r277627,r277650,r282059,r283056,r283840,r283845:
r277627 (by will):

Add routing_test:static_ipv6_loopback_route_for_each_fib.
It tests that all FIBs get a static IPv6 loopback route.

Submitted by:	asomers
Sponsored by:	Spectra Logic
MFSpectraBSD:	1048456 on 2014/03/13
		1114523 on 2015/01/23

r277650 (by will):

Add tests/etc/rc.d to mtree.

Submitted by:	stefanf
MFC with:	277627

r282059:

Move etc/tests/rc.d to etc/rc.d/tests to match the directory layout jmmv@
documented and implemented in other areas of the FreeBSD tree

r283056:

Move all test integration pieces for etc/ from etc/ to tests/

This is being done to fix breakage with make distribution with read-only
source trees as make distribution doesn't use make obj like building
tests/ does in all cases

Reported by: Wolfgang Zenker <wolfgang@lyxys.ka.sub.org>
Suggested by: jhb

r283840:

Remove empty tests directory

r283845:

Append to SUBDIR, not set it

Pointyhat to: ngie
2015-05-31 22:39:48 +00:00
ngie
c3292ff7e0 MFC r282061:
Integrate tools/regression/execve into the FreeBSD test suite as
tests/sys/kern/execve
2015-05-16 23:39:54 +00:00
ngie
807e2f21fd MFC r262781,r263336:
r262781 (by pho):

Preserve naming consistency for test cases.

Pointed out by:	 jmmv
Sponsored by:	EMC / Isilon storage division

r263336 (by pho):

Added sysctl kern.maxfiles increase test, do not use /etc/passwd for tests
and use volatile sig_atomic_t for signal handler variable.

Reviewed by:	 asomers (previous version)
Sponsored by:	EMC / Isilon storage division
2015-05-13 12:17:01 +00:00
ngie
8557666627 MFC r282211,r282244:
r282211:

ATF_REQUIRE_KERNEL_MODULE: use atf_skip, not ATF_REQUIRE_MSG so the testcase
no longer bombs out
PLAIN_REQUIRE_KERNEL_MODULE: use printf + _exit, no err so the testcase no
longer bombs out if it prints to stderr

r282244:

Fix typo. It should have been atf_tc_skip, not atf_skip

Reported by: many, Jenkins
Pointyhat to: ngie
2015-05-13 12:13:18 +00:00
ngie
3a757c0c1f MFC r281593,r282071,r282074,r282133,r282134,r282135,r282136,r282137,r282138:
r282071:

Integrate tools/regression/mqueue into the FreeBSD test suite as
tests/sys/mqueue

r282074:

Integrate tools/regression/aio/aiotest and tools/regression/aio/kqueue into the
FreeBSD test suite as tests/sys/aio

r282133:

Fill in the copyright boilerplate for the test program

r282134:

Add initial (unpolished) macros for interfacing with the FreeBSD test suite

This is very rough, but will be replaced/redesigned some time soon after I fix
the Jenkins breakage I introduced

r282135:

Use ATF_REQUIRE_KERNEL_MODULE instead of aio_available function

r282136:

- Use ATF_REQUIRE_KERNEL_MDOULE to require aio(4)
- Don't use /tmp as a basis for temporary files as it's outside of the ATF
  sandbox
- Don't override MAX macro in sys/param.h

r282137:

Use PLAIN_REQUIRE_KERNEL_MODULE to require "mqueuefs"

r282138:

Adjust CFLAGS to find freebsd_test_suite/macros.h
2015-05-13 12:09:01 +00:00
ngie
8071140ed5 MFC r282076,r282104:
r282076:

Integrate tools/regression/mmap into the FreeBSD test suite as
tests/sys/kern/mmap_test

r282104:

Move tests/sys/kern/mmap_test to tests/sys/vm/mmap_test

As jhb noted, the actual mmap(2) implementation is under sys/vm, not
sys/kern/, so the correct logical place is tests/sys/vm/, not
tests/sys/kern/
2015-05-13 11:12:06 +00:00
ngie
f67941309b MFC r262526,r262730:
r262526 (by pho):

Added a regression test for r234131.

Discussed with:	 asomers
Sponsored by:	EMC / Isilon storage division

r262730 (by pho):

Changed name of test case to a more descriptive one and moved
comment to the "descr" property.

Suggested by:	 jmmv
Sponsored by:	EMC / Isilon storage division
2015-05-13 11:01:48 +00:00
ngie
51336e1434 MFC r282067:
Integrate tools/regression/fifo into the FreeBSD test suite as tests/sys/fifo
and tools/regression/file into the FreeBSD test suite as tests/sys/file
2015-05-13 10:24:23 +00:00
ngie
559871946b MFC r282063:
Integrate tools/regression/kqueue into the FreeBSD test suite as
tests/sys/kqueue
2015-05-13 10:21:13 +00:00
ngie
d4c625976a MFC r264400,r265836:
r264400:

  NO_MAN= has been deprecated in favor of MAN= for some time, go ahead
  and finish the job. ncurses is now the only Makefile in the tree that
  uses it since it wasn't a simple mechanical change, and will be
  addressed in a future commit.

r265836:

  Remove last two NO_MAN= in the tree. In both of these cases, MAN= is
  what is needed.
2014-12-31 23:25:37 +00:00
ngie
2ceba1b134 MFC r272057,r272083,r272084,r272087,r274016:
r272057:

  Import pjdfstest from ^/vendor/pjdfstest/abf03c3a47745d4521b0e4aa141317553ca48f91

  - Remove tools/regression/pjdfstest
  - Add upgrade directions for contrib/pjdfstest
  - Add a note to UPDATING for the move (the reachover Makefiles are coming
    soon)

  Functional differences:
  - ftruncate testcases are added from upstream (github)

  Non-functional differences:
  - The copyright for the project has been updated to 2012
  - pjd's contact information has been updated

  Discussed with: -testing, jmmv, pjd
  Sponsored by: EMC / Isilon Storage Division

r272083:

  Expect ELOOP on Darwin/Linux with "O_NOFOLLOW was specified and the target is a
  symbolic link" case. Assume EMLINK on the rest of the OSes (FreeBSD, Solaris,
  etc)

  Sponsored by: EMC / Isilon Storage Division

r272084:

  Fix the executed testplan count

  Sponsored by: EMC / Isilon Storage Division

r272087:

  Increase the memory disk size in the following testcases to avoid mount
  failures, which would cause cascade failures in the rest of the test
  run:

  link/15.t, open/19.t, mkdir/11.t, mkfifo/11.t, symlink/11.t

  Fail quickly in all of the testcases if mdconfig, mount, umount, etc
  fails to avoid issues similar to this in the future

  Submitted by: Casey Peel <cpeel@isilon.com>
  Sponsored by: EMC / Isilon Storage Division

r274016:

  Integrate pjdfstest test suite execution into kyua

  pjdfstest execution is opt-in and must be done as root due to some of the
  assumptions made by the test suite and lack of error checking in the non-root
  case

  A description of how to execute pjdfstest with kyua is provided in
  share/pjdfstest/README

  Phabric: D824 (an earlier prototype patch)
  Relnotes: yes
  Sponsored by: EMC / Isilon Storage Division
2014-12-05 11:44:18 +00:00
ngie
20a08c7aa6 MFC r274021:
Remove explicit KYUAFILE=yes from tests/sys/Makefile

  This causes the directory traversing Kyuafile to be installed, which in turn
  causes tests/sys/pjdfstest to always be run from /usr/tests/sys

  Let KYUAFILE default to auto, so the file generated by suite.test.mk gets
  installed instead
2014-11-15 05:05:32 +00:00
ngie
0933b11ea6 MFC r274052:
Remove unused tests/lib directory
2014-11-15 05:03:44 +00:00
ngie
94236d8fbc MFC r274267:
Use PROGS instead of PROG and remove unnecessary SRCS?= assignment

  Using PROG instead of PROGS will in cases of high -j with -DNO_ROOT cause
  the PROG to show up more than once as it's handling the SCRIPTS install case
  in a recursive manner, separate from the non-recursive case

  After the recent batch of commits to bsd.progs.mk to fix behavior with how
  variables are defaulted to, explicitly setting SRCS for a PROG is no longer
  required

  Reviewed by: asomers
  Phabric: D1130
  Sponsored by: EMC / Isilon Storage Division
2014-11-15 05:02:06 +00:00
asomers
218f93e5f8 MFC changes related to PR kern/189089. Unlike CURRENT, stable/10 does not
panic when you attempt to remove the IP address.  But it still fails to
remove the address.

MFC r265094

Add regression test for PR kern/189088.

MFC r265092

Fix a panic when removing an IP address from an interface, if the same
address exists on another interface.  The panic was introduced by change
264887, which changed the fibnum parameter in the call to rtalloc1_fib() in
ifa_switch_loopback_route() from RT_DEFAULT_FIB to RT_ALL_FIBS.  The
solution is to use the interface fib in that call.  For the majority of
users, that will be equivalent to the legacy behavior.
2014-06-06 22:14:25 +00:00
asomers
322a1ee4a0 MFC r264887
Fix host and network routes for new interfaces when net.add_addr_allfibs=0

sys/net/route.c
        In rtinit1, use the interface fib instead of the process fib.  The
        latter wasn't very useful because ifconfig(8) is usually invoked
        with the default process fib.  Changing ifconfig(8) to use setfib(2)
        would be redundant, because it already sets the interface fib.

tests/sys/netinet/fibs_test.sh
        Clear the expected ATF failure

sys/net/if.c
        Pass the interface fib in calls to rtrequest1_fib and rtalloc1_fib

sys/netinet/in.c
sys/net/if_var.h
        Add a fibnum argument to ifa_switch_loopback_route, a subroutine of
        in_scrubprefix.  Pass it the interface fib.
2014-06-06 21:45:14 +00:00
asomers
a8aa481895 MFC changes relating to running multiple interfaces on different fibs but
with addresses on the same subnet.

MFC r266860

Fix unintended KBI change from r264905.  Add _fib versions of
ifa_ifwithnet() and ifa_ifwithdstaddr()  The legacy functions will call the
_fib() versions with RT_ALL_FIBS, preserving legacy behavior.

sys/net/if_var.h
sys/net/if.c
        Add legacy-compatible functions as described above.  Ensure legacy
        behavior when RT_ALL_FIBS is passed as fibnum.

sys/netinet/in_pcb.c
sys/netinet/ip_output.c
sys/netinet/ip_options.c
sys/net/route.c
sys/net/rtsock.c
sys/netinet6/nd6.c
        Call with _fib() functions if we must use a specific fib, or the
        legacy functions otherwise.

tests/sys/netinet/fibs_test.sh
tests/sys/netinet/udp_dontroute.c
        Improve the udp_dontroute test.  The bug that this test exercises is
        that ifa_ifwithnet() will return the wrong address, if multiple
        interfaces have addresses on the same subnet but with different
        fibs.  The previous version of the test only considered one possible
        failure mode: that ifa_ifwithnet_fib() might fail to find any
        suitable address at all.  The new version also checks whether
        ifa_ifwithnet_fib() finds the correct address by checking where the
        ARP request goes.

MFC r264917

Style fixes, mostly trailing whitespace elimination.  No functional change.

MFC r264905

Fix subnet and default routes on different FIBs on the same subnet.

These two bugs are closely related.  The root cause is that ifa_ifwithnet
does not consider FIBs when searching for an interface address.

sys/net/if_var.h
sys/net/if.c
        Add a fib argument to ifa_ifwithnet and ifa_ifwithdstadddr.  Those
        functions will only return an address whose interface fib equals the
        argument.

sys/net/route.c
        Update calls to ifa_ifwithnet and ifa_ifwithdstaddr with fib
        arguments.

sys/netinet/in.c
        Update in_addprefix to consider the interface fib when adding
        prefixes.  This will prevent it from not adding a subnet route when
        one already exists on a different fib.

sys/net/rtsock.c
sys/netinet/in_pcb.c
sys/netinet/ip_output.c
sys/netinet/ip_options.c
sys/netinet6/nd6.c
        Add RT_DEFAULT_FIB arguments to ifa_ifwithdstaddr and ifa_ifwithnet.
        In some cases it there wasn't a clear specific fib number to use.
        In others, I was unable to test those functions so I chose
        RT_DEFAULT_FIB to minimize divergence from current behavior.  I will
        fix some of the latter changes along with PR kern/187553.

tests/sys/netinet/fibs_test.sh
tests/sys/netinet/udp_dontroute.c
tests/sys/netinet/Makefile
        Revert r263738.  The udp_dontroute test was right all along.
        However, bugs kern/187550 and kern/187553 cancelled each other out
        when it came to this test.  Because of kern/187553, ifa_ifwithnet
        searched the default fib instead of the requested one, but because
        of kern/187550, there was an applicable subnet route on the default
        fib.  The new test added in r263738 doesn't work right, however.  I
        can verify with dtrace that ifa_ifwithnet returned the wrong address
        before I applied this commit, but route(8) miraculously found the
        correct interface to use anyway.  I don't know how.

        Clear expected failure messages for kern/187550 and kern/187552.

MFC r263738

tests/sys/netinet/Makefile
tests/sys/netinet/fibs.sh
        Replace fibs:udp_dontroute with fibs:src_addr_selection_by_subnet.
        The original test was poorly written; it was actually testing
        kern/167947 instead of the desired kern/187553.  The root cause of the
        bug is that ifa_ifwithnet did not have a fib argument.  The new test
        more directly targets that behavior.

tests/sys/netinet/udp_dontroute.c
        Delete the auxilliary binary used by the old test
2014-06-06 20:35:40 +00:00
asomers
a03c4d3869 MFC r263779
Correct ARP update handling when the routes for network interfaces are
restricted to a single FIB in a multifib system.

Restricting an interface's routes to the FIB to which it is assigned (by
setting net.add_addr_allfibs=0) causes ARP updates to fail with "arpresolve:
can't allocate llinfo for x.x.x.x".  This is due to the ARP update code hard
coding it's lookup for existing routing entries to FIB 0.

sys/netinet/in.c:
	When dealing with RTM_ADD (add route) requests for an interface, use
	the interface's assigned FIB instead of the default (FIB 0).

sys/netinet/if_ether.c:
	In arpresolve(), enhance error message generated when an
	lla_lookup() fails so that the interface causing the error is
	visible in logs.

tests/sys/netinet/fibs_test.sh
	Clear ATF expected error.
2014-06-06 17:42:55 +00:00
asomers
b9bac26480 MFC r263445 and r265385. Note that the change to ObsoleteFiles.inc in
r265385 does not need to be MFCed, because the obsolete files in question
were never MFCed to any stable branch.

r265385
Remove the ifconfig test added in rev 263445.  After discussion with
melifaro, we agreed that ifconfig's behavior was not a bug.  The main
motivation for bin/187551 was to partially resolve kern/187549, but we
resolved kern/187549 in a different way instead.

ObsoleteFiles.inc
etc/mtree/BSD.tests.dist
sbin/ifconfig/tests/fibs_test.sh
sbin/ifconfig/tests/Makefile
sbin/ifconfig/Makefile
        Remove /usr/tests/sbin/ifconfig

r263445
Add several ATF tests that deal with multiple fibs.  They're described in
several different PRs, but the tests share some common code, so I'm
committing them together.

sbin/ifconfig/tests
sbin/ifconfig/tests/fibs_test.sh
sbin/ifconfig/tests/Makefile
sbin/ifconfig/Makefile
        Add fibs_test.sh, which regresses bin/187551

tests/sys/netinet
tests/sys/netinet/fibs_test.sh
tests/sys/netinet/udp_dontroute.c
tests/sys/netinet/Makefile
tests/sys/Makefile
        Add fibs_test.sh, which regresses kern/167947, kern/187552
        kern/187549, kern/187550, and kern/187553

etc/mtree/BSD.tests.dist
        Add newly created directories
2014-05-07 18:49:25 +00:00
jmmv
9bf14ad939 MFC r264133: Fix variable type to avoid printf formatter warning. 2014-04-17 13:11:56 +00:00
jmmv
63fa6c9a5b MFC refactoring of the *.test.mk files.
- r263161 Make bsd.test.mk the only public mk fragment for the building of tests.
- r263172 Move FreeBSD Test Suite-specific code to a suite.test.mk file.
- r263204 Add some documentation for bsd.test.mk.
- r263217 Document support for TAP-compliant Perl test programs.

This is "make tinderbox" clean.
2014-04-14 23:51:57 +00:00
asomers
6b6e4c2d32 MFC r263116
Replace 4.4BSD Lite's unix domain socket backpressure hack with a cleaner
mechanism, based on the new SB_STOP sockbuf flag.  The old hack dynamically
changed the sending sockbuf's high water mark whenever adding or removing
data from the receiving sockbuf.  It worked for stream sockets, but it never
worked for SOCK_SEQPACKET sockets because of their atomic nature.  If the
sockbuf was partially full, it might return EMSGSIZE instead of blocking.

The new solution is based on DragonFlyBSD's fix from commit
3a6117bbe0ed6a87605c1e43e12a1438d8844380 on 2008-05-27.  It adds an SB_STOP
flag to sockbufs.  Whenever uipc_send surpasses the socket's size limit, it
sets SB_STOP on the sending sockbuf.  sbspace() will then return 0 for that
sockbuf, causing sosend_generic and friends to block.  uipc_rcvd will
likewise clear SB_STOP.  There are two fringe benefits: uipc_{send,rcvd} no
longer need to call chgsbsize() on every send and receive because they don't
change the sockbuf's high water mark.  Also, uipc_sense no longer needs to
acquire the UIPC linkage lock, because it's simpler to compute the
st_blksizes.

There is one drawback: since sbspace() will only ever return 0 or the
maximum, sosend_generic will allow the sockbuf to exceed its nominal maximum
size by at most one packet of size less than the max.  I don't think that's
a serious problem.  In fact, I'm not even positive that FreeBSD guarantees a
socket will always stay within its nominal size limit.

sys/sys/sockbuf.h
	Add the SB_STOP flag and adjust sbspace()

sys/sys/unpcb.h
	Delete the obsolete unp_cc and unp_mbcnt fields from struct unpcb.

sys/kern/uipc_usrreq.c
	Adjust uipc_rcvd, uipc_send, and uipc_sense to use the SB_STOP
	backpressure mechanism.  Removing obsolete unpcb fields from
	db_show_unpcb.

tests/sys/kern/unix_seqpacket_test.c
	Clear expected failures from ATF.
2014-04-03 16:57:16 +00:00
asomers
df22d5312e MFC r262867
Fix PR kern/185813 "SOCK_SEQPACKET AF_UNIX sockets with asymmetrical buffers
drop packets".  It was caused by a check for the space available in a
sockbuf, but it was checking the wrong sockbuf.

sys/sys/sockbuf.h
sys/kern/uipc_sockbuf.c
	Add sbappendaddr_nospacecheck_locked(), which is just like
	sbappendaddr_locked but doesn't validate the receiving socket's space.
	Factor out common code into sbappendaddr_locked_internal().  We
	shouldn't simply make sbappendaddr_locked check the space and then call
	sbappendaddr_nospacecheck_locked, because that would cause the O(n)
	function m_length to be called twice.

sys/kern/uipc_usrreq.c
	Use sbappendaddr_nospacecheck_locked for SOCK_SEQPACKET sockets,
	because the receiving sockbuf's size limit is irrelevant.

tests/sys/kern/unix_seqpacket_test.c
	Now that 185813 is fixed, pipe_128k_8k fails intermittently due to
	185812.  Make it fail every time by adding a usleep after starting the
	writer thread and before starting the reader thread in test_pipe.  That
	gives the writer time to fill up its send buffer.  Also, clear the
	expected failure message due to 185813.  It actually said "185812", but
	that was a typo.

PR:		kern/185813
2014-03-27 16:47:35 +00:00
asomers
7a8191d019 MFC r262868
Only use -lpthread for unix_seqpacket_test, not for all test programs.

MFC r262894

kern/Makefile
        Set WARNS=5 for all files in this directory
kern/unix_seqpacket_test.c
	Fix compiler warnings.  Most were benign, but rcvbuf_oversized
	wasn't working as intended because I forgot to set the buffer sizes.
2014-03-21 22:43:00 +00:00
asomers
ca8eab6508 MFC r262133
test_eagain_*_* should've been using nonblocking sockets instead of blocking
sockets.  The error was not exposed as long as the kernel suffered from PR
kern/185812.  Now corrected, these tests pass on DragonFlyBSD 3.6.0.
2014-03-06 21:47:22 +00:00
jmmv
6c6bd8779d Install a symlink from /usr/tests/local to /usr/local/tests.
This is a MFC of r261959 and r261978.
2014-03-06 13:38:23 +00:00
asomers
999d9343fa MFC r261081, r261133, and r261615
r261081
	Replace the old unix_seqpacket and unix_seqpacket_exercise
	tests, which were a little broken and not automatable, with
	unix_seqpacket_test.  It's coverage is a superset of the old
	tests and it uses ATF.  It includes test cases for bugs
	kern/185813 and kern/185812.

r261133
	Fix the Makefiles so that the tests I submitted in r261081 will
	actually get built.

r261615
	tests/sys/Makefile
		use TESTS_SUBDIRS for kern instead of SUBDIRS.  I don't
		think it makes a difference in this case, but
		TESTS_SUBDIRS is generally correct for subdirectories
		that contain tests.
2014-02-13 22:19:24 +00:00
jmmv
b8ce141a40 Set up the /usr/tests hierarchy.
This is a MFC of the following into stable/10:
- r257097 Set up the /usr/tests hierarchy.
- r257098 Add missing WITHOUTTESTS file.
- r257100 Add a tests(7) manual page.
- r257105 Disable WITHTESTS= for now.
- r257848 Fix buildworld when WITHTESTS is enabled.
- r257850 Subsume the functionality of MKATF into MKTESTS.
- r257851 Handle the removal of the test suite when WITHOUTTESTS=yes.
- r257852 Install category Kyuafiles from their category directories.
- r258232 Install BSD.tests.mtree when MKTESTS is yes.

Note that building with WITH_TESTS is still broken at this point (and
hence why WITHOUT_TESTS is the set as the default).  Subsequent pullups
will fix the remaining issues.
2013-12-28 20:05:31 +00:00